为了账号安全,请及时绑定邮箱和手机立即绑定

从内部访问外部结构

从内部访问外部结构

Go
开心每一天1111 2022-05-18 09:44:22
我有一个与此类似的问题:从嵌入式 struct 访问 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 的有效方法?这种方法有什么可能的缺点吗?
查看完整描述

2 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

拥有指向外部结构的指针是唯一的方法。缺点是您必须确保指针已初始化。所以,像构造函数这样的东西可能会有所帮助:


func NewOuter() *Outer {

  ret:=Outer{}

  ret.outer=&ret

  return &ret

}

此外,您必须注意如何传递Outer,因为内部结构中的指针可能最终指向您不期望的 Outer 实例:


func f(o Outer) {

   g(&o)

}

上面,g将获得一个实例,Outer其指针指向与Outer它所获得的实例不同的实例。


查看完整回答
反对 回复 2022-05-18
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

如果你真的想这样做,你需要确保你永远不要复制 Outer,因为副本的 Inner 将指向错误的 Outer。

请参阅 sync.Mutex 或 WaitGroup 以了解如何制作无法复制的结构。


查看完整回答
反对 回复 2022-05-18
  • 2 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信