首页 > 后端开发 > Golang > Go 的解引用运算符是否创建对原始结构的副本或引用?

Go 的解引用运算符是否创建对原始结构的副本或引用?

Barbara Streisand
发布: 2024-11-28 12:29:10
原创
225 人浏览过

Does Go's Dereference Operator Create a Copy or a Reference to the Original Struct?

Go 解引用:是否复制,这是问题

使用解引用运算符 (*) 访问 Go 结构体时,用户可能会想知道结果是结构的新副本还是对原始结构的引用

理解行为

在提供的代码片段中:

type me struct {
    color string
    total int
}

func study() *me {
    p := me{}
    return &p
}

obj := *study()
登录后复制

study() 返回一个指向 me 结构的指针。在 obj 中取消引用它会创建该结构的副本。这从 &p.color 和 &obj.color 的内存地址中可以明显看出,它们是不同的。

人们可能期望解除引用的 struct obj 与原始结构具有相同的内存地址,但情况并非如此这个例子。这种行为可以归因于 Go 在变量作用域末尾自动释放变量。

当它实际上是一个引用时

要实现引用行为,可以分配一个使用以下方式直接指向结构体:

obj := study()
登录后复制

在这种情况下, obj 将是指向原始 me 结构体的指针,并且对 p 或 obj 的更改都会影响相同的底层结构。

结论

在 Go 中取消引用结构时,重要的是要了解结果是以下内容的副本原始结构,除非显式分配了指向该结构的指针。此行为确保对取消引用的结构所做的更改不会影响原始结构,从而保持封装和变量独立性。

以上是Go 的解引用运算符是否创建对原始结构的副本或引用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板