【发布时间】:2020-03-16 08:30:28
【问题描述】:
我知道使用 & 符号寻址存储值的地址,但是当我进入“Tour of Go”时,在他们介绍指针和特殊接收器的部分中,他们有如下代码来引用向量struct 进行缩放并获取绝对值,如图所示:
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, Abs: %v\n", 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},我会得到相同的输出。在这种情况下引用内存地址是否更好?更多的是我似乎不理解的概念性情况。
【问题讨论】:
标签: pointers go struct pass-by-reference