登录
首页 >  Golang >  Go问答

Go 似乎并没有像我想象的那样传递指针

来源:stackoverflow

时间:2024-04-12 17:51:34 192浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《Go 似乎并没有像我想象的那样传递指针》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我这里有一个 go 程序,我用它来测试在一个更大的 http 服务程序中遇到的指针错误。

我有一个结构指针,我想传递给函数来初始化它。当然,因为它是一个指针,所以我不必返回任何内容。应该直接修改它。

但是,这并不是这里发生的情况。

func main () {
   var thing *Thing
   ModifyThing(thing)
   fmt.Println(thing)
}

func ModifyThing (thing *Thing) {
   thing = NewThing()
}

func NewThing () *Thing {
   thing := Thing{}
   return &thing
}

/// Output: 

如果我直接在 thing 上使用 newthing(),我将获得一个初始化的指针。但是,当我将指针传递给调用相同方法的函数时,这不起作用。我的 thing 的内存位置是否没有按照我的预期传递?


解决方案


您的 modifything 实际上并未修改 thing。它使用指向 thing 新实例的新指针覆盖其局部变量 thing,因此它对其他任何内容都没有影响。如果它实际修改 thing - 例如,thing.field = newvalue,这将反映在调用者中。

如果您想覆盖指针指向的整个值,也可以这样做,但您必须显式覆盖所指向的内存而不是指针本身:

*thing = Thing{}

请注意,我们取消引用 *thing,并用新的 thing 覆盖其值(不是新的 *thing!)

go 中的所有内容都是按值传递的,包括指针。指针指向内存地址,该地址可以是共享值。但指针本身仍然在函数调用时被复制。

终于介绍完啦!小伙伴们,这篇关于《Go 似乎并没有像我想象的那样传递指针》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>