下面的片段,
package main
import (
"encoding/xml"
"fmt"
)
func main() {
var r struct {
Item []struct {
Value string `xml:"value,attr"`
Flag bool `xml:"flag,attr"`
} `xml:"item"`
}
xml.Unmarshal([]byte(`
<result>
<item value="1" flag="false" />
<item value="2" flag="true" />
<item value="3" />
</result>`,
), &r)
fmt.Printf("%+v\n", r)
}
将打印以下结果:
{Item:[{Value:1 Flag:false} {Value:2 Flag:true} {Value:3 Flag:false}]}
在某些元素中,flag属性将丢失(例如上面的第 3 项),但我希望它采用默认值true, 而不是false。
我无法在构造函数中分配它,因为我不知道数组中的元素数量。
我无法使用UnmarshalerAttr
在解组期间实现和分配的自定义类型,因为如果缺少该属性,UnmarshalXMLAttr
则不会运行。
我可以让它成为一个指针,然后检查是否为 nil,然后为 true,但这只是粗暴且容易出错的。
我该怎么做呢?
扬帆大鱼
相关分类