为了账号安全,请及时绑定邮箱和手机立即绑定

在golang中将单个字段编组为两个标签

在golang中将单个字段编组为两个标签

Go
慕哥9229398 2022-01-04 13:31:55
试图了解一种为 xml 创建自定义编组器的方法,结构如下:<Appointment><Date>2004-12-22</Date><Time>14:00</Time></Appointment>我在想这样的事情:type Appointment struct {    DateTime time.Time `xml:"???"`}问题是,我会用什么代替???将单个字段保存到两个不同的 xml 标签中?
查看完整描述

2 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

复杂的编组/解组行为通常需要满足 Marshal/Unmarshal 接口(对于 XML、JSON 和 go 中的类似设置类型也是如此)。


您需要xml.Marshaler使用MarshalXML()函数来满足接口,如下所示:


package main


import (

    "encoding/xml"

    "fmt"

    "time"

)


type Appointment struct {

    DateTime time.Time

}


type appointmentExport struct {

    XMLName struct{} `xml:"appointment"`

    Date    string   `xml:"date"`

    Time    string   `xml:"time"`

}


func (a *Appointment) MarshalXML(e *xml.Encoder, start xml.StartElement) error {

    n := &appointmentExport{

        Date: a.DateTime.Format("2006-01-02"),

        Time: a.DateTime.Format("15:04"),

    }

    return e.Encode(n)

}


func main() {

    a := &Appointment{time.Now()}

    output, _ := xml.MarshalIndent(a, "", "    ")

    fmt.Println(string(output))

}


// prints:

// <appointment>

//     <date>2016-04-15</date>

//     <time>17:43</time>

// </appointment>


查看完整回答
反对 回复 2022-01-04
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

快速猜测,你不能。你应该xml.Marshaler用你的Appointment类型实现接口......


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信