我使用Go的反射函数来获取方法的类型,但是我发现可以获取的方法与接收方是否为指针有关。为什么会这样?
当我运行下面的代码时,我得到了以下结果。
--- value interface ---
Test
--- pointer interface ---
Test
ToString
我不明白Method方法获得的结果与接收者是否是指针有什么关系。
type User struct{}
type Admin struct{ User }
func (*User) ToString() {
fmt.Println("tostring")
}
func (Admin) Test() {
fmt.Println("test")
}
func main27() {
var u Admin
methods := func(t reflect.Type) {
for i, n := 0, t.NumMethod(); i < n; i++ {
m := t.Method(i)
fmt.Println(m.Name)
}
}
fmt.Println("--- value interface ---")
methods(reflect.TypeOf(u))
fmt.Println("--- pointer interface ---")
methods(reflect.TypeOf(&u))
}