«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как получить список имен методов из интерфейса Go с помощью отражения?

Как получить список имен методов из интерфейса Go с помощью отражения?

Опубликовано 11 ноября 2024 г.
Просматривать:692

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

Получение списка имен методов из интерфейса

В Go отражение позволяет проверять внутреннюю структуру программы и манипулировать ею во время выполнения . Сюда входит возможность доступа к информации о типе интерфейса, такой как имена его методов.

Рассмотрим следующий интерфейс:

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

Чтобы получить список имен методов для этого интерфейса с помощью отражения:

  1. Получите отражение. Тип для типа интерфейса:
t := reflect.TypeOf((*FooService)(nil)).Elem()

Эта строка извлекает Reflect.Type для конкретного типа, который реализует интерфейс FooService.

  1. Получить количество методов:
for i := 0; i 

Функция NumMethod() возвращает количество методов в интерфейсе.

  1. Получите имена методов:
s = append(s, t.Method(i).Name)

Функция Method(i) возвращает Reflection.Method Объект, представляющий метод по индексу i. Поле Name этого объекта содержит имя метода.

Полученный список будет содержать имена методов ["Foo1", "Foo2"].

Пояснения:

  • Синтаксис (*FooService)(nil) используется для создания указателя на анонимный экземпляр интерфейса FooService. Это необходимо для получения Reflection.Type для интерфейса.
  • Метод Elem() возвращает Reflection.Type для конкретного типа, реализующего интерфейс, а не самого типа интерфейса.
  • Функция NumMethod() возвращает количество методов, объявленных в интерфейсе, даже если конкретный тип реализует дополнительные методы.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3