Допустим, у меня есть структура Foo с методом, определенным следующим образом:
type Foo struct {
Name string
}
func (f *Foo) Get(a int, b string) (string, error) {
return f.Name, nil
}
Если я напишу
obj := &Foo{}
t := reflect.TypeOf(obj.Get)
t.Kind()
возвращает reflect.Func
и, по-видимому, у меня нет возможности получить доступ к информации, что Get
func Я извлек информацию о типе из "принадлежит" к структуре Foo
, то есть получатель имеет тип Foo
, это даже не отображается в параметрах.
Полагаю, это намеренно, и я упускаю что-то фундаментальное в функциях, из-за которых авторы языка отбрасывают информацию о приемнике для операций typeof, применяемых к ссылкам на методы.
У меня есть два вопроса:
- Правильно ли я и нет способа получить тип получателя во фрагменте с
TypeOf
вызов выше?
- Какие у меня есть альтернативы, если я хочу передать информацию об отражении метода в некоторый код, который предназначен для анализа функции и связанного получателя (то есть, по сути, метода)?
Пытаясь ответить на второй вопрос самостоятельно, и исходя из того, что я вижу в официальной документации, похоже, что мои единственные варианты - либо передать TypeOf (получатель) и TypeOf (получатель.метод), либо TypeOf (получатель) и имя метод получателя.