如何更改嵌套结构中的内部结构和原始结构
How to change both inner and original struct in a nested struct
我是 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}}
golang 总是按值复制而不是引用,你可以像这样使用指针
type innerStruct struct {
a int
}
type outerStruct struct {
b int
inner *innerStruct
}
我是 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}}
golang 总是按值复制而不是引用,你可以像这样使用指针
type innerStruct struct {
a int
}
type outerStruct struct {
b int
inner *innerStruct
}