Method declarations
方法是有 接收者 的函数 。方法声明将标识符(方法名称)绑定到方法,并将该方法与接收者的基本类型关联起来。
MethodDecl = "func" Receiver MethodName Signature [ FunctionBody ] .
Receiver = Parameters .
接收者是通过方法名称前面的额外参数部分指定的。这个参数部分必须声明一个非可变参数,也就是接收者。其类型必须是定义类型 T
或指向已定义类型 T
的指针,T
是称为接收者的基本类型。接收者的基本类型不能是指针或接口类型,并且必须在与方法相同的程序包中定义。这个定义过程称为将该方法与其接收器基本类型绑定,并且该方法名称仅在类型T
或 *T
的选择器中可见。
一个非空 接收者标识符 在方法签名中必须是 唯一 的。如果方法体中没有用到这个接收者那么在参数声明中可以省略,这一规则与函数和方法的普通参数类似。
对于基本类型而言, 绑定到它的的非空方法名称必须是唯一的。如果基本类型是 结构体类型](golang.org/ref/spec#Struct_types)...。
例如,有一个定义类型 Point
,对其声明如下方法
func (p *Point) Length() float64 {
return math.Sqrt(p.x * p.x + p.y * p.y)
}
func (p *Point) Scale(factor float64) {
p.x *= factor
p.y *= factor
}
将 Length
和 Scale
方法绑定到了接收者 *Point
进而绑定到了基本类型 Point
。
方法的类型是将接收者作为第一个参数的函数类型。例如,方法Scale
具有的类型是
func(p *Point, factor float64)
不过,以这种方式声明的函数不是方法。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。