登录
首页 >  Golang >  Go问答

探索内外结构联系

来源:stackoverflow

时间:2024-03-10 09:15:26 342浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《探索内外结构联系》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我有一个与此类似的问题:从嵌入结构访问结构字段,只不过 a 不是嵌入结构,而是只有一个嵌套结构。

基本上,我需要的是能够从嵌套结构访问外部结构。然而,接受的答案中建议的组合方法不适合我当前的“结构的结构”,因此如果没有一些繁琐的重构,它并不真正适用。

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

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 实例。

如果您确实想这样做,您需要确保您永远不会制作 outer 的副本,因为副本的 inner 将指向错误的 outer。

请参阅sync.mutex或waitgroup了解如何创建无法复制的结构。

今天关于《探索内外结构联系》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>