为什么可以';我们是否将切片或贴图嵌入Go结构
我了解到,不允许在Go结构中嵌入切片或贴图。但我找到了两个解决办法:为什么可以';我们是否将切片或贴图嵌入Go结构,go,struct,composition,embedding,Go,Struct,Composition,Embedding,我了解到,不允许在Go结构中嵌入切片或贴图。但我找到了两个解决办法: 在结构外部声明切片或映射,并将其嵌入到结构中 var mySlice []int type myStruct struct { mySlice } type myStruct struct { mySlice []int } 我不太理解第二种解决方法,但我发现它叫做Composition,在结构中声明切片或映射时,只需省略var关键字即可 var mySlice []int type myStruct str
var mySlice []int
type myStruct struct {
mySlice
}
type myStruct struct {
mySlice []int
}
var mySlice []int
type myStruct struct {
mySlice
}
type myStruct struct {
mySlice []int
}
T
或指向非接口类型名*T
的指针,并且T
本身不能是指针类型。非限定类型名用作字段名
不能嵌入像map[int]string
这样的匿名类型。等级库需要类型名。即使您可以嵌入它,它也会包含括号,这会使它失去作为标识符的资格,而且spec再次指出,非限定类型名充当字段名
只需为其创建一个新类型,然后即可嵌入:
type mymap map[int]string
type s struct {
mymap
}
在结构中嵌入类型时,会忽略字段名。在第二次尝试中:
type myStruct struct {
mySlice []int
}
您没有忽略字段名(它是
mySlice
),因此这不是嵌入,它是一个常规的命名字段。Second不是一个“解决方法”-您只是在结构中声明了一个字段。你在选项1中所做的肯定是无效的。选项2中的内容看起来完全是标准的。你说“将切片和贴图嵌入结构”是什么意思?你能举一个你称之为“嵌入”的例子吗?@AmitKumarGupta他们可能键入了var
->type
。那么它就行了。@AmitKumarGupta,我不明白你说的选项1无效是什么意思,但它行得通。我在这个网站上看到的短语“将切片和映射嵌入结构”的意思是:您的第一个示例无效,不是因为您无法将切片嵌入结构,而是因为您无法将变量嵌入结构mySlice
是命名变量,而不是类型。如果您将其更改为类型mySlice[]int
,则其他coe工作正常。