请问NumMethod返回的meehod个数为什么和我预想的不一样?

nemox · · 1136 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

<pre><code> package main import ( "fmt" "reflect" ) type Foo struct { X string Y int } func (f *Foo) Do() { //fmt.Printf("X is: %s, Y is: %d", f.X, f.Y) fmt.Println("Do()\r\n") } func (f Foo) Doa(str string) { //fmt.Printf("X is: %s, Y is: %d", f.X, f.Y) fmt.Println("Doa()\r\n", str) } func (f Foo) Dob() { //fmt.Printf("X is: %s, Y is: %d", f.X, f.Y) fmt.Println("Dob()\r\n") } func (f *Foo) Doc() { //fmt.Printf("X is: %s, Y is: %d", f.X, f.Y) fmt.Println("Doc()\r\n") } func main() { var f Foo = Foo{"1", 2} typ := reflect.TypeOf(f) typa := reflect.TypeOf(&f) fmt.Println(typ.NumMethod(), typa.NumMethod()) //2 4 m := typ.Method(0) fmt.Println(m.Name) fmt.Println(m.Type) fmt.Println(m.Func) fmt.Println(m.Index) m = typ.Method(1) fmt.Println(m.Name) fmt.Println(m.Type) fmt.Println(m.Func) fmt.Println(m.Index) fmt.Println("___________________________________________________________________\r\n") m = typa.Method(0) fmt.Println(m.Name) fmt.Println(m.Type) fmt.Println(m.Func) fmt.Println(m.Index) m = typa.Method(1) fmt.Println(m.Name) fmt.Println(m.Type) fmt.Println(m.Func) fmt.Println(m.Index) m = typa.Method(2) fmt.Println(m.Name) fmt.Println(m.Type) fmt.Println(m.Func) fmt.Println(m.Index) m = typa.Method(3) fmt.Println(m.Name) fmt.Println(m.Type) fmt.Println(m.Func) fmt.Println(m.Index) } </code></pre> 程序的输出为: <pre><code> 2 4 Doa func(main.Foo, string) 0x4c3490 0 Dob func(main.Foo) 0x4c3570 1 ___________________________________________________________________ Do func(*main.Foo) 0x4c3410 0 Doa func(*main.Foo, string) 0x4c46e0 1 Dob func(*main.Foo) 0x4c4780 2 Doc func(*main.Foo) 0x4c35f0 3 </code></pre> <pre><code> 问题1: fmt.Println(typ.NumMethod(), typa.NumMethod()) 的输出为什么是2和4? 问题2: 为什么会有两个Dob,一个Type是func(*main.Foo)一个是func(main.Foo)? </code></pre>

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1136 次点击  
加入收藏 微博
2 回复  |  直到 2017-12-27 06:18:48
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传