1. 带有接收者的函数,我们称为method。method是附属在一个给定的类型上的,他的语法和函数的声明语法几乎一样,只是在func后面增加了一个receiver(也就是method所依从的主体)。method的语法如下:
func (r ReceiverType) funcName(parameters) (results)
在使用method的时候重要注意几点
- 虽然method的名字一模一样,但是如果接收者不一样,那么method就不一样
- method里面可以访问接收者的字段
- 调用method通过.访问,就像struct里面访问字段一样
2. method可以定义在任何你自定义的类型、内置类型、struct等各种类型上面。
type typeName typeLiteral
type ages int
type money float32
type months map[string]int
m := months {
"January":31,
"February":28,
...
"December":31,
}
3. 如果一个method的receiver是*T,你可以在一个T类型的实例变量V上面调用这个method,而不需要&V去调用这个method;如果一个method的receiver是T,你可以在一个*T类型的变量P上面调用这个method,而不需要 *P去调用这个method。
4. method也是可以继承的。method重写时,和匿名字段冲突时的选择是一样的道理。