Go语言中文文档-04方法

方法定义

• 只能为当前包内命名类型定义方法。
• 参数 receiver 可任意命名。如方法中未曾使用 ,可省略参数名。
• 参数 receiver 类型可以是 T 或 *T。基类型 T 不能是接口或指针。
• 不支持方法重载,receiver 只是参数签名的组成部分。
• 可用实例 value 或 pointer 调用全部方法,编译器自动转换。

匿名字段

Golang匿名字段 :可以像字段成员那样访问匿名字段方法,编译器负责查找。
通过匿名字段,可获得和继承类似的复用能力。依据编译器查找次序,只需在外层定义同名方法,就可以实现 "override"。

方法集

• 类型 T 方法集包含全部 receiver T 方法。
• 类型 *T 方法集包含全部 receiver T + *T 方法。
• 如类型 S 包含匿名字段 T,则 S 和 *S 方法集包含 T 方法。
• 如类型 S 包含匿名字段 *T,则 S 和 *S 方法集包含 T + *T 方法。
• 不管嵌入 T 或 T,S 方法集总是包含 T + *T 方法。

表达式

根据调用者不同,方法分为方法值和方法表达式。
方法值:instance.method(args...)
方法表达式:.func(instance, args...)
method value 会复制 receiver。

posted @ 2022-03-24 15:13  人生hh  阅读(44)  评论(0)    收藏  举报