Pointers 使用变量地址的调用指针接收器方法

Pointers 使用变量地址的调用指针接收器方法,pointers,go,Pointers,Go,我正在学习指针接收器,并注意到,当我使用变量的地址调用该方法时,会得到error/prog.go:21:10:v.Scale(10)用作值 我可以只使用变量名或指针调用该方法。我试图理解为什么当我使用变量&v.Scale(10)的地址调用Go时,该方法需要顶点类型的指针时,Go会抱怨 import ( "fmt" ) type Vertex struct { X, Y float64 } func (v *Vertex) Scale(f float64) { v.X

我正在学习指针接收器,并注意到,当我使用变量的地址调用该方法时,会得到error
/prog.go:21:10:v.Scale(10)用作值

我可以只使用变量名或指针调用该方法。我试图理解为什么当我使用变量
&v.Scale(10)
的地址调用Go时,该方法需要
顶点类型的指针时,Go会抱怨


import (
    "fmt"
)

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}
    var p *Vertex
    p=&v
    v.Scale(10)        //This works
    p.Scale(10)        //This works
    &v.Scale(10)       // This does not work
    fmt.Println(v)
}
声明

&v.Scale(10) 
相当于

&(v.Scale(10))
编译器抱怨,因为
v.Scale(10)
被用作值

改用这个:

(&v).Scale(10) 
在操场上跑步: