方法接收器

bro*_*oun 5 methods syntax go

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 允许任何名称而不是?是这样吗 ?

Did*_*zia 3

您的假设是准确的:必须在方法定义中显式命名接收者。它避免了任何歧义。在您的示例中,Go 编译器如何猜测 x 是接收者?

请注意,在 go 中使用“self”或“this”或“me”作为接收者名称被认为是不好的风格。名字应该很短——一个字母就可以了。如需了解更多信息,请访问https://code.google.com/p/go-wiki/wiki/CodeReviewComments#Receiver_Names