这不是编译器 错误, 而是设计决定。语言规范仅指出:
提升的字段的作用类似于结构的普通字段,只是它们不能用作结构的复合文字中的字段名称。
我想这背后的原因是为了避免歧义。使用选择器时,有一些规则可以解决名称冲突,为了允许您的建议,它们必须很复杂。最重要的是,如果您在嵌入类型的结构文字中使用嵌入式结构的现有实例,则可能会造成歧义。
编辑:这是一个可能适得其反的例子:
考虑一下您有一个嵌入B的A和要嵌入的A实例的情况:
type A { X int}type B { A}这很简单
b := B{ X: 1 }并推断应该做什么。但是,如果我们已经有A的实例怎么办?这没有道理:
a := A { X: 1 }b := B { X: 2, A: a, }您是否首先将2分配给A的零实例,然后在它之上分配A的初始化实例?并等同于:
b := B { A: a, X: 2 } ?它打破了这样的假设:初始化顺序与具有字段名称的复合文字无关。



