Go 方法接收器采用类型以及该类型的变量名称,例如:
type MyFloat float64
func (x MyFloat) Abs() float64 {
if x < 0 {
return float64(-x)
}
return float64(x)
}
func main() {
f := MyFloat(-math.Sqrt2)
fmt.Println(f.Abs())
}
Run Code Online (Sandbox Code Playgroud)
接收者带有"x"接收方法的类型。“x”这个名字有什么意义?既然我能够在 MyFloat 的任何实例上调用该方法(不仅仅是在名为 x 的实例上),为什么我必须指定 x ?由于接收者是一个类型或对类型的引用,为什么不像这样简单地单独获取类型或指针
func (MyFloat) Abs() float64 {
if this < 0 {
return float64(-this)
}
return float64(this)
}
Run Code Online (Sandbox Code Playgroud)
this我的假设是Java golang 允许任何名称而不是?是这样吗 ?
您的假设是准确的:必须在方法定义中显式命名接收者。它避免了任何歧义。在您的示例中,Go 编译器如何猜测 x 是接收者?
请注意,在 go 中使用“self”或“this”或“me”作为接收者名称被认为是不好的风格。名字应该很短——一个字母就可以了。如需了解更多信息,请访问https://code.google.com/p/go-wiki/wiki/CodeReviewComments#Receiver_Names