【发布时间】:2020-04-08 21:56:46
【问题描述】:
我了解到不允许将切片或映射嵌入到 Go 结构中。但我找到了两种解决方法:
-
在结构外声明切片或映射并将其嵌入到结构中
var mySlice []int type myStruct struct { mySlice } -
我不太了解第二种解决方法,但我发现它被称为 Composition,它是通过在结构中声明切片或映射时省略 var 关键字来完成的
type myStruct struct { mySlice []int }
我的第一个问题是,谁能解释为什么我们不能直接将切片和映射嵌入到结构中?
第二个问题:使用第二个解决方法,是否会对性能产生负面影响?
第三个问题:为什么第一个和第二个解决方法有效?
【问题讨论】:
-
Second 不是“解决方法”-您只是在结构中声明了一个字段。 tour.golang.org/moretypes/2
-
您在选项 1 中的内容绝对无效。选项 2 中的内容看起来完全标准。当您说“将切片和映射嵌入结构”时,您是什么意思?你能举一个你称之为“嵌入”的例子吗?
-
@AmitKumarGupta 他们可能打错了
var->type。然后就可以了。 -
@AmitKumarGupta,我不明白你的意思是选项 1 无效,但它有效。我所说的“将切片和映射嵌入结构”的意思是我在这个网站上看到的:mariadesouza.com/2017/09/29/embedding-in-go
-
您的第一个示例无效,不是因为您不能将切片嵌入到结构中,而是因为您不能将 变量 嵌入到结构中。
mySlice是命名变量,而不是类型。如果您将其更改为type mySlice []int,则您的 coe 的其余部分工作正常。
标签: go struct composition embedding