golang中 方法集的概念,你了解么?

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

go规范中提到过方法集的概念,你了解么?下面的代码输出结果是啥? package main import "fmt" type t1 int type t2 int func( t *t1) String() string { return "ptr" } func( t t2) String() string { return "val" } func main() { var a t1 var b t2 a = 5 fmt.Println( a, b) } 结果分析: 指针的方法集包括两部分:(t *T)这样的方法和(t T)这样的方法; 值得方法集只包含本身,即:(t T)这样的方法 不过有一点别弄混了: 方法集的概念是对接口来说的 实际上,一个值类型a是可以调用(t *T)这样的方法的,因为调用时会变为:&a 具体分析: a是一个t1类型,t1类型针对指针实现了String()方法,a是一个值的时候,并不享受t1类型指针绑定的String()方法。b是一个t2类型,t2类型针对值实现了String方法,所以b实现了stringer接口,所以被调用了String()方法,打印val. 进入fmt.Println后过程如下: //传入fmt.Println后,其实,相当于要做如下判断 var c interface{} c = a switch c.(type) { case fmt.Stringer: fmt.Println("a is Stringer type") default: fmt.Println("a is not Stringer type") } c = b switch c.(type) { case fmt.Stringer: fmt.Println("b is Stringer type") default: fmt.Println("bi is not stringer type") }

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

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

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