Я хочу проанализировать атрибут xml как тип перечисления iota (int) в go.
Ниже вы можете увидеть, что я пробовал, но это не работает, потому что адрес переменных перечисления не может быть взят.
type EnumType int
const (
EnumUnknown EnumType = iota
EnumFoo
EnumBar
)
func (E *EnumType) UnmarshalXMLAttr(attr xml.Attr) error {
switch attr.Value {
case "foo":
E = &EnumFoo
case "bar":
E = &EnumBar
default:
E = &EnumUnknown
}
return nil
}
// Example of how the unmarshal could be called:
type Tag struct {
Attribute EnumType `xml:"attribute,attr"`
}
func main() {
tag := &Tag{}
xml.Unmarshal([]byte("<tag attribute=\"foo\"/>"), tag)
}
Любой другой способ заставить UnmarshalXMLAttr
работать с типами int?
Обновление: я знаю, что могу решить эту проблему, добавив метод UnmarshalXML
в Tag, но хочупо возможности избегайте этого, потому что у меня много разных тегов с множеством разных атрибутов, но только с несколькими типизированными атрибутами.Поэтому реализация UnmarshalXML
методов для каждого тега не будет предпочтительной.