首页  >  文章  >  后端开发  >  解组 XML 时如何自定义 Go 中 time.Time 字段的日期解析?

解组 XML 时如何自定义 Go 中 time.Time 字段的日期解析?

DDD
DDD原创
2024-11-07 17:49:02563浏览

How to Customize Date Parsing for time.Time Fields in Go When Unmarshalling XML?

Go 中的自定义 XML 日期解析与 time.Time 字段

Golang 提供了将 XML 数据解组到自定义结构的灵活性,但它并没有解组 XML 时不支持为 time.Time 字段指定自定义日期格式。当返回的日期格式与默认的 Go 格式不同时,这可能会导致解析错误。

CustomUnmarshaler 解决方案

要克服此限制,您可以使用以下命令创建自定义结构体匿名 time.Time 字段并实现您自己的 UnmarshalXML 方法。此方法将使用您的自定义格式解析日期字符串并相应地设置 time.Time 字段。

type customTime struct {
    time.Time
}

func (c *customTime) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    const shortForm = "20060102" // yyyymmdd date format
    var v string
    d.DecodeElement(&v, &start)
    parse, err := time.Parse(shortForm, v)
    if err != nil {
        return err
    }
    *c = customTime{parse}
    return nil
}

合并自定义结构

将您的 Transaction 结构更新为包含自定义时间字段:

type Transaction struct {
    //...
    DateEntered     customTime     `xml:"enterdate"`
    //...
}

现在,XML 解组将使用 customTime 结构并根据您定义的格式解析日期字符串。

附加注释

如果 XML 元素使用日期属性,则需要以相同的方式实现 UnmarshalXMLAttr。请参阅提供的代码片段中的示例以获取指导。

以上是解组 XML 时如何自定义 Go 中 time.Time 字段的日期解析?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn