Golang - 为什么我可以从值类型调用指针接收器方法?

我再次经历了围棋之旅,我对这个方法模块感到困惑


简而言之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}


婷婷同学_
浏览 275回答 1
1回答

月关宝盒

在同一个教程中,稍后在几张幻灯片中提供了解释:在方法和指针间接幻灯片中,以下摘录提供了解释:对于语句 v.Scale(10),即使 v 是一个值而不是指针,带有指针接收器的方法也会被自动调用。也就是说,为方便起见,Go 将语句 v.Scale(10) 解释为 (&v).Scale(10),因为 Scale 方法有一个指针接收器。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go