Go匿名嵌套结构体初始化报错:missing type in composite literal
Go匿名嵌套结构体初始化错误修复及相关问题解答
错误原因与修复方案
你遇到的missing type in composite literal错误,是因为Go在初始化嵌套匿名结构体字段时,要求显式指定该字段对应的匿名结构体类型字面量。修复后的代码如下:
func wrapHal(selfHref string) interface{} { return struct { _links struct { self struct { href string } } }{ _links: struct { self struct { href string } }{ self: struct{ href string }{href: selfHref}, }, } }
如果觉得重复写结构体定义繁琐,也可以先为嵌套的匿名结构体定义类型别名,简化初始化代码:
func wrapHal(selfHref string) interface{} { type selfLink struct { href string } type links struct { self selfLink } return struct { _links links }{ _links: links{self: selfLink{href: selfHref}}, } }
Go是否支持初始化匿名嵌套结构体?
支持,但必须遵循Go的复合字面量语法规则:对于匿名结构体类型的字段,初始化时需要显式写出其结构体类型字面量,编译器才能正确识别值的类型并完成初始化。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

