方法即函数
记住:方法只是个带接收者参数的函数。
你只能为在同一包内定义的类型的接收者声明方法,而不能为其它包内定义的类型(包括 int
之类的内建类型)的接收者声明方法。
方法与函数的差异:
方法可以根据接收者的类型调整变量的类型,函数要求传参与定义参数类型必须严格一致。
var v Vertex
v.Scale(5) // OK
p := &v
p.Scale(10) // OK
对于语句 v.Scale(5)
,即便 v
是个值而非指针,带指针接收者的方法也能被直接调用。 也就是说,由于 Scale
方法有一个指针接收者,为方便起见,Go 会将语句 v.Scale(5)
解释为 (&v).Scale(5)
。
也就是说无需担心接收者调用方法时接收者的类型,go语言会帮