如何在go中初始化嵌套结构?

时间:2017-08-04 13:30:49

标签: go struct nested

我的结构是这样的

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,我做错了什么?

1 个答案:

答案 0 :(得分:1)

问题是B是一个匿名的嵌入式结构。为了将struct literal定义为另一个struct的成员,您需要提供该类型。最简单的方法是为匿名类型定义结构类型。

你可以通过做这个非常丑陋的事情来使它工作(假设C和D在某处定义):

x := &A{
        B: struct{C interface{}}{
             C : map[string]interface{}{
                 D: 123,
                 E: xyx,
             },
        },
}