Метод reflect.Type.NumMethod
Метод NumMethod интерфейса reflect.Type возвращает количество экспортируемых методов, объявленных для конкретного типа. В первый параметр метод не принимает аргументов, а возвращает целочисленное значение типа int. Важно отметить, что учитываются только экспортируемые методы - те, имена которых начинаются с заглавной буквы. Неэкспортируемые методы не включаются в подсчет.
Синтаксис
typeOfType.NumMethod()
Пример
Давайте получим количество методов для пользовательского типа MyStruct:
package main
import (
"fmt"
"reflect"
)
type MyStruct struct{}
func (m MyStruct) FirstMethod() {}
func (m MyStruct) SecondMethod() {}
func (m MyStruct) thirdMethod() {}
func main() {
t := reflect.TypeOf(MyStruct{})
res := t.NumMethod()
fmt.Println(res)
}
Результат выполнения кода:
2
В данном примере тип MyStruct имеет три метода, но только два из них экспортируются: FirstMethod и SecondMethod. Метод thirdMethod начинается со строчной буквы и не учитывается.
Пример
Рассмотрим, как ведет себя метод NumMethod для встроенного типа int:
package main
import (
"fmt"
"reflect"
)
func main() {
var num int = 42
t := reflect.TypeOf(num)
res := t.NumMethod()
fmt.Println(res)
}
Результат выполнения кода:
0
Встроенные типы, такие как int, не имеют методов, поэтому метод возвращает значение 0.
Пример
Используем метод NumMethod для получения количества методов типа MyType с указателями на методы:
package main
import (
"fmt"
"reflect"
)
type MyType struct {
Name string
}
func (m *MyType) SetName(name string) {
m.Name = name
}
func (m MyType) GetName() string {
return m.Name
}
func main() {
t := reflect.TypeOf(&MyType{})
fmt.Println("Methods count for pointer:", t.NumMethod())
tElem := t.Elem()
fmt.Println("Methods count for value:", tElem.NumMethod())
}
Результат выполнения кода:
"Methods count for pointer: 1"
"Methods count for value: 1"
В этом примере для типа указателя учитывается метод SetName, а для типа значения - метод GetName. Оба метода экспортируются и возвращают значение 1.
Смотрите также
-
тип
reflect.Type,
который представляет собой тип в отражении (reflection) -
метод
reflect.Type.Method,
который возвращает информацию о конкретном методе по индексу -
метод
reflect.Type.NumField,
который возвращает количество полей структуры -
метод
reflect.Value.Method,
который возвращает значение метода для вызова