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

为什么用户指针指向 golang 中的结构?

为什么用户指针指向 golang 中的结构?

Go
素胚勾勒不出你 2022-07-11 17:18:07
从教程中的 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 会为你翻译。


方法并不是唯一有用的地方指针。当您想在多个位置处理相同的数据时,请使用指针。


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

添加回答

举报

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