我知道使用&符号地址来存储值的地址,但是当我要进行“ Tour of Go”时,在介绍指针和特殊接收器的部分中,它们具有以下用于引用Vector的代码结构缩放并获得绝对值,如下所示:
package main
import (
"fmt"
"math"
)
type Vertex struct {
X,Y float64
}
func (v *Vertex) Scale(f float64) {
v.X = v.X * f
v.Y = v.Y * f
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
v := &Vertex{3,4}
fmt.Printf("Before scaling: %+v,Abs: %v\n",v,v.Abs())
v.Scale(5)
fmt.Printf("After scaling: %+v,v.Abs())
}
输出为:
Before scaling: &{X:3 Y:4},Abs: 5
After scaling: &{X:15 Y:20},Abs: 25
但是,如果将主函数调用更改为具有v := Vector{3.4}
而不是v:= &Vector{3.4}
,则会得到相同的输出。在这种情况下,参考内存地址是否是更好的做法?我似乎不了解更多的概念性情况。