这个问题在这里已有答案:
我再次经历Tour of Go,我对此感到困惑Methods Module
简而言之,指定了类型 Vertex
以及具有指针接收器的函数
type Vertex struct {
X, Y float64
}
func (v *Vertex) Scale(f float64) {
v.X = v.X * f
v.Y = v.Y * f
}
不用担心 . 但是,我的混淆来自main函数,它似乎允许值类型调用指定指针接收器的方法 .
func main() {
v := Vertex{3, 4}
v.Scale(10)
// v's fields have changed
}
我检查了v的类型以确保
fmt.Printf("v's type is %T\n", v)
// v's type is main.Vertex
为什么允许这样做?不应该 v
需要是一个指向调用 Scale
方法的指针,例如 v := &Vertex{3, 4}
1 回答
从同一个教程中,稍后会提供一些说明:
在Methods and pointer indirection slide中,以下摘录提供了解释: