为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
婷婷同学_ 2022-01-17 10:50:47
我再次经历了围棋之旅,我对这个方法模块感到困惑简而言之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 方法有一个指针接收器。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 274 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信