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