如何更改嵌套结构中的内部结构和原始结构



我是Go的新手,我正在努力了解嵌套结构的可变性是如何工作的。我用嵌套结构创建了一个小测试。我想做的是能够编写类似outer.inner.a = 18的代码,它同时更改inner.aouter.inner.a

这是可能的,还是结构不是这样工作的?我应该使用指向内部结构的指针吗?我曾经使用过OOP,所以这种修改子对象的逻辑对我来说是直观的。在Go中不同吗?

package main
import "fmt"
type innerStruct struct {
a int
}
type outerStruct struct {
b     int
inner innerStruct
}
func main() {
inner := innerStruct{1}
outer := outerStruct{3, inner}
fmt.Println(inner)
fmt.Println(outer)
inner.a = 18
fmt.Println(inner)
fmt.Println(outer)
outer.inner.a = 22
fmt.Println(inner)
fmt.Println(outer)
}

输出:

{1}
{3 {1}}
{18}
{3 {1}}  // I want {3 {18}} here
{18}     // I want {22} here
{3 {22}}

https://go.dev/play/p/tD5S5k2eJLp?v=gotip

golang总是按值而非引号进行复制,您可以使用类似的指针

type innerStruct struct {
a int
}
type outerStruct struct {
b     int
inner *innerStruct
}

最新更新