来自中文源,使用时生成cdata输出xml.Marshal()
,我可以:
package main
import (
"encoding/xml"
"fmt"
"time"
)
type TextMsg struct {
XMLName xml.Name `xml:"xml"`
ToUserName CDATA
FromUserName CDATA
CreateTime int64
MsgType CDATA
Content CDATA
}
type CDATA struct {
Text string `xml:",cdata"`
}
func main() {
msg := TextMsg{
ToUserName: CDATA{"userId"},
FromUserName: CDATA{"appId"},
CreateTime: time.Now().Unix(),
MsgType: CDATA{"text"},
Content: CDATA{"some message like <hello>"}}
b, _ := xml.MarshalIndent(msg, "", " ")
fmt.Println(string(b))
}
但是,如果我想同时添加.omitempty
标签,我尝试将TextMsg
结构更改为:
type TextMsg struct {
XMLName xml.Name `xml:"xml"`
ToUserName CDATA `xml:",omitempty"`
FromUserName CDATA `xml:",omitempty"`
CreateTime int64 `xml:",omitempty"`
MsgType CDATA `xml:",omitempty"`
Content CDATA `xml:",omitempty"`
}
并将其更改main()
为:
var msg TextMsg
msg.ToUserName = CDATA{"userId"},
msg.FromUserName: CDATA{"appId"},
msg.CreateTime: time.Now().Unix(),
b, _ := xml.MarshalIndent(msg, "", " ")
空的MsgType
并Content
没有省略。我可以知道omitempty
与cdata
标签一起设置的正确方法是什么吗?