gpt4 book ai didi

go - 从内部进入外部结构

转载 作者:行者123 更新时间:2023-12-01 22:44:34 25 4
gpt4 key购买 nike

我有一个与此问题类似的问题:accessing struct fields from embedded struct,除了一个嵌入式结构而不是嵌入式结构。

基本上,我需要的是可以从嵌套结构访问外部结构的可能性。但是,在接受的答案中建议的组合方法不适合我当前的“结构结构”,因此,如果不进行一些繁琐的重构,它实际上是不适用的。

相反,我想到了将指向外部结构的指针嵌入内部结构的想法:

type Outer struct {
someField int
innerStruct Inner
}

type Inner struct {
outerStruct *Outer
}

func test() {
outer := Outer{someField:123}
inner := Inner{outerStruct:&outer}
outer.innerStruct = inner
println(inner.outerStruct.someField) // just to test
}

因此,现在我想知道,从意识形态上讲,这对于Go是否有效?并且此方法是否有任何缺点?

最佳答案

拥有指向外部结构的指针是唯一的方法。缺点是您必须确保指针已初始化。因此,类似构造函数的方法可能会有所帮助:

func NewOuter() *Outer {
ret:=Outer{}
ret.outer=&ret
return &ret
}

另外,您还必须注意如何传递 Outer,因为内部结构中的指针可能最终指向您不期望的Outer实例:
func f(o Outer) {
g(&o)
}

在上面, g将获得 Outer的一个实例,并带有一个指向 Outer的实例的指针,该实例与其获得的实例不同。

关于go - 从内部进入外部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60171781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com