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

Golang - 将 XML time.Time 编组为 XML 属性的日期格式

Golang - 将 XML time.Time 编组为 XML 属性的日期格式

Go
拉莫斯之舞 2022-01-04 13:34:38
我正在尝试格式化自定义时间类型 Date,它实现了 Marshaler 接口,并在编写为 XML 时简单地将自身格式化为“2006-01-02”。type Person struct {    ...    DateOfBirth           Date      `xml:"DOB,attr"`    ...}type Date time.Timefunc (d Date) MarshalXML(e *xml.Encoder, start xml.StartElement) error {    dateString := fmt.Sprintf("\"%v\"", time.Time(d).Format("2006-01-02"))        e.EncodeElement(dateString, start)    return nil}我使用这个 SO作为参考,但错误 - &xml.UnsupportedTypeError{Type:(*reflect.rtype)} - 被抛出。我错过了一些东西,有什么想法吗?
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

您正在实现错误的接口。


由于 Date 类型旨在作为属性进行封送处理(如xml:"DOB,attr"标签所示),因此它需要实现xml.MarshalerAttr接口:


type MarshalerAttr interface {

    MarshalXMLAttr(name Name) (Attr, error)

}

所以你可能需要添加这样的代码:


func (d Date) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {

    dateString := time.Time(d).Format("2006-01-02")    

    attr := xml.Attr {

        name,

        dateString,

    }


    return attr, nil

}

请注意,我从值字符串中删除了明显不必要的引号。


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

添加回答

举报

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