接口和编码/xml 解组

我有一个我正在反对的肥皂服务。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 结构(作为使用我正在创建的包的开发人员)


千巷猫影
浏览 202回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go