从教程中的 go -package mainimport "fmt"type Vertex struct { X int Y int}func main() { v := Vertex{1, 2} p := &v p.X = 1e9 fmt.Println(v)}我可以只做 vX 以获得相同的值,而不是分配一个指针(p = &v 然后 pX)。是否有类似的设计模式稍后会出现?
1 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
是的,你本来可以做到v.X = 1e9的。这就是示例的重点,v.X = 1e9并且p := &v; p.X = 1e9是等效的。这是一个简单的例子来说明指针是如何工作的。这并不意味着实用。
一旦您开始将结构传递给方法,指针就变得非常重要。假设您想编写一个设置 X 的方法。如果我们将结构作为值传递...
func (v Vertex) setX(newX int) {
v.X = newX
}
func main() {
v := Vertex{1, 2}
v.setX(1e9)
fmt.Println(v)
}
我们得到{1 2}. 它没有设置。这是因为 Go将值复制到方法中。setX在您的结构的副本上工作。
相反,我们传递一个指针。
func (v *Vertex) setX(newX int) {
v.X = newX
}
现在我们得到{1000000000 2}. setX正在处理指向您的结构的指针。
注意v.setX(1e9)是真的(&v).setX(1e9),但 Go 会为你翻译。
方法并不是唯一有用的地方指针。当您想在多个位置处理相同的数据时,请使用指针。
- 1 回答
- 0 关注
- 119 浏览
添加回答
举报
0/150
提交
取消