"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como você recupera uma lista de nomes de métodos de uma interface em Go usando reflexão?

Como você recupera uma lista de nomes de métodos de uma interface em Go usando reflexão?

Publicado em 2024-11-11
Navegar:270

How do you retrieve a list of method names from an interface in Go using reflection?

Obtendo uma lista de nomes de métodos de uma interface

No Go, a reflexão permite inspecionar e manipular a estrutura interna de um programa em tempo de execução . Isso inclui a capacidade de acessar informações sobre um tipo de interface, como nomes de métodos.

Considere a seguinte interface:

type FooService interface {
    Foo1(x int) int
    Foo2(x string) string
}

Para obter uma lista dos nomes dos métodos para esta interface usando reflexão:

  1. Obtenha o reflect.Type para o tipo de interface:
t := reflect.TypeOf((*FooService)(nil)).Elem()

Esta linha recupera o reflect.Type para o tipo concreto que implementa a interface FooService.

  1. Recuperar o número de métodos:
for i := 0; i 

A função NumMethod() retorna o número de métodos na interface.

  1. Obtenha os nomes dos métodos:
s = append(s, t.Method(i).Name)

A função Method(i) retorna um objeto reflect.Method que representa o método no índice i. O campo Nome deste objeto contém o nome do método.

As listas resultantes conterão os nomes dos métodos ["Foo1", "Foo2"].

Explicações:

  • A sintaxe (*FooService)(nil) é usada para criar um ponteiro para uma instância anônima da interface FooService. Isso é necessário para obter o reflect.Type para a interface.
  • O método Elem() retorna o reflect.Type para o tipo concreto que implementa a interface, em vez do próprio tipo de interface.
  • A função NumMethod() retorna o número de métodos declarados na interface, mesmo que o tipo concreto implemente métodos adicionais.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3