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

How to change both inner and original struct in a nested struct

我是 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
}