我的结构是这样的
type A struct{
B struct{
C interface{} `json:"c"`
}
}
type C struct{
D string `json:"d"`
E string `json:"e"`
}
使用这个结构就像这样,
func someFunc(){
var x A
anotherFunc(&x)
}
func anotherFunc(obj interface{}){
// resp.Body has this {D: "123", E: "xyx"}
return json.NewDecoder(resp.Body).Decode(obj)
}
我必须为单元测试初始化它,我正在这样做,
x := &A{
B: {
C : map[string]interface{}{
D: 123,
E: xyx,
},
},
}
但是收到错误missing type in composite literal
,我做错了什么?
答案 0 :(得分:1)
问题是B
是一个匿名的嵌入式结构。为了将struct literal定义为另一个struct的成员,您需要提供该类型。最简单的方法是为匿名类型定义结构类型。
你可以通过做这个非常丑陋的事情来使它工作(假设C和D在某处定义):
x := &A{
B: struct{C interface{}}{
C : map[string]interface{}{
D: 123,
E: xyx,
},
},
}