Go - 如何将struct field的数据类型定义为另一个struct

时间:2014-10-11 09:59:21

标签: go

如何将struct的字段类型定义为struct?

我希望能够拥有如下内容:

type HelloResp struct {
  Response struct `xml:resp`
}

func (hr *HelloResp) SetHelloResp(interf interface{}) {
  hr.Response = interf
}

基本上我有一些其他的子结构我想在HelloResp.Response下根据需要嵌入,所以它们可以通过函数互换。

这是否可行或是否有任何推荐的Go方式?

1 个答案:

答案 0 :(得分:0)

如果您使用innerxml字段标记,则可以延迟处理,直到您知道结构中的内容为止。为此,您可能需要HTTP标头或提供类型的字段。然后,您可以根据该类型解组响应内容。

type HelloResp struct {
    ResponseType string `xml:responseType`
    Response []byte `xml:response,innerxml`
}
  

如果struct有一个类型为[] byte或字符串且带有标记",innerxml"的字段,则Unmarshal会累积嵌套在该字段中元素内的原始XML。其余规则仍然适用。

另一个(不太可取的)选项是将所有可能包含的类型列为指针。 unmarshaller将填充它找到的那个。您需要弄清楚哪一个已设置,因此无论哪种方式都需要响应类型。