我再次经历了围棋之旅,我对这个方法模块感到困惑简而言之Vertex,指定了一个类型以及一个带有指针接收器的函数type Vertex struct { X, Y float64}func (v *Vertex) Scale(f float64) { v.X = v.X * f v.Y = v.Y * f}这里不用担心。但是,我的困惑来自主函数,它似乎允许值类型调用指定指针接收器的方法。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 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
在同一个教程中,稍后在几张幻灯片中提供了解释:
在方法和指针间接幻灯片中,以下摘录提供了解释:
对于语句 v.Scale(10),即使 v 是一个值而不是指针,带有指针接收器的方法也会被自动调用。也就是说,为方便起见,Go 将语句 v.Scale(10) 解释为 (&v).Scale(10),因为 Scale 方法有一个指针接收器。
- 1 回答
- 0 关注
- 274 浏览
添加回答
举报
0/150
提交
取消