我有一个我正在反对的肥皂服务。soap API 的一部分用于返回查询结果,我希望提供用于解码信封的基本结构,同时允许开发人员填写 encoding/xml 将解码到的接口。
type QueryEnvelope struct {
XMLName xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/ Envelope"`
Body *QueryBody `xml:"http://schemas.xmlsoap.org/soap/envelope/ Body"`
}
type QueryBody struct {
QueryResult *QueryResult `xml:"queryResponse>result"`
}
type QueryResult struct {
Done bool `xml:"done"`
Size int `xml:"size"`
Records Record `xml:"records"`
}
type Record interface {
UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
}
是否可以注入这样的接口以进行解组,还是必须在 QueryEnvelope{} 级别接受该接口?
理想情况下,客户端会像这样:
type Record struct {
Id int `xml:"id"`,
Name stirng `xml:"name"`
}
func (r *Record) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
// unmasrshal here, or best case I dont even need to implment UnmarsahlXML()!
}
res, err := Query("select id from table", Record{})
这意味着他们不必重现 QueryEnvelope 结构(作为使用我正在创建的包的开发人员)
相关分类