Метод reflect.Type.NumMethod

Метод NumMethod интерфейса reflect.Type возвращает количество экспортируемых методов, объявленных для конкретного типа. В первый параметр метод не принимает аргументов, а возвращает целочисленное значение типа int. Важно отметить, что учитываются только экспортируемые методы - те, имена которых начинаются с заглавной буквы. Неэкспортируемые методы не включаются в подсчет.

Синтаксис

gotypeOfType.NumMethod()

Пример

Давайте получим количество методов для пользовательского типа MyStruct:

gopackage 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)
}

Результат выполнения кода:

go2

В данном примере тип MyStruct имеет три метода, но только два из них экспортируются: FirstMethod и SecondMethod. Метод thirdMethod начинается со строчной буквы и не учитывается.

Пример

Рассмотрим, как ведет себя метод NumMethod для встроенного типа int:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var num int = 42
  t := reflect.TypeOf(num)
  res := t.NumMethod()
  fmt.Println(res)
}

Результат выполнения кода:

go0

Встроенные типы, такие как int, не имеют методов, поэтому метод возвращает значение 0.

Пример

Используем метод NumMethod для получения количества методов типа MyType с указателями на методы:

gopackage 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())
}

Результат выполнения кода:

go"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,
    который возвращает значение метода для вызова