我正在尝试为Alfred 2应用程序生成XML。看起来有点像这样:
<items>
<item autocomplete="My Thing">
<title>My Thing</title>
</item>
<item>
<title>My Other Thing</title>
</item>
<item autocomplete="">
<title>My Third Thing</title>
</item>
</items>
我面临的具体挑战是,如果autocomplete
上的item
属性丢失,那么Alfred的行为会有所不同。
因此,我希望能够提供两种可能性:默认省略属性(omitempty
),但可以强制将其设置为空字符串(不是 omitempty
)。
我怎么能这样做?
答案 0 :(得分:1)
您可以在要编组的结构中使用指针。如果指针为nil
,则将省略该字段。如果它指向一个字符串,它将被渲染(即使该字符串为空)。
type Address struct {
City *string
}
city1 := "NYC"
city2 := ""
address1 := Address{&city1}
address2 := Address{&city2}
address3 := Address{nil}
enc := xml.NewEncoder(os.Stdout)
enc.Encode(address1) // <Address><City>NYC</City></Address>
enc.Encode(address2) // <Address><City></City></Address>
enc.Encode(address3) // <Address></Address>