首页 > 后端开发 > Golang > 如何通过 Go 函数中的指针修改值?有哪些不同的方法?

如何通过 Go 函数中的指针修改值?有哪些不同的方法?

Susan Sarandon
发布: 2024-10-28 05:10:30
原创
652 人浏览过

How do I modify values through pointers in Go functions, and what are the different approaches?

在 Go 中通过指针更改值

在 Go 中,将指针传递给函数允许直接操作指向的值。但是,在为指针赋值时需要考虑某些细微差别。

在不修改值的情况下分配指针

考虑以下代码:

<code class="go">type Test struct {
    Value int
}

func main() {
    var i Test = Test{2}
    var p *Test = &i
    f(p)
    println(i.Value) // 2
}

func f(p *Test) {
    // Assigning a new pointer value
    p = &Test{4}
}</code>
登录后复制

在此代码中,p 是指向 i 结构体的指针。在 f 函数中,为 p 分配新的指针值不会修改 i 的值。这是因为 p 是 f 中的局部变量,更改其值只会影响本地副本。

修改指向值

要实际修改 i 的值,您需要更改指向结构的值。这可以通过取消引用运算符 (*) 来完成。例如:

<code class="go">func f(p *Test) {
    p.Value = 4
}</code>
登录后复制

这里,p.Value 取消引用指针 p 并将值 4 分配给指向结构的 Value 字段。当 f 返回时,此更改将反映在 i 中。

将指针分配给指针

或者,您可以在 f 函数中修改指针本身。但是,这需要将指针变量 (&p) 的地址传递给 f。

<code class="go">func f(p **Test) {
    *p = &Test{4}
}</code>
登录后复制

在这种情况下,*p 取消引用双指针 p 并分配一个新的指针值,从而有效地更改 p 变量在主要。然而,这种方法并不那么简单,并且比直接修改指向的值效率低。

结论

将指针传递给函数时,理解以下内容至关重要:分配新指针 (p = &Test{4}) 和修改指向的值 (p.Value = 4) 之间的区别。后一种方法允许直接操作结构体值,而前一种方法仅更改指针本身。

以上是如何通过 Go 函数中的指针修改值?有哪些不同的方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

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