2016-04-13 25 views
3

Özel bir zaman türünü biçimlendirmeye çalışıyorum, Tarih, Marshaler arabirimini uygular ve XML olarak yazıldığında kendisini "2006-01-02" olarak biçimlendirir. .Golang - Marshaling XML zamanı.Micro özniteliği için tarih biçimi olarak saat

type Person struct { 
    ... 
    DateOfBirth   Date  `xml:"DOB,attr"` 
    ... 
} 

type Date time.Time 

func (d Date) MarshalXML(e *xml.Encoder, start xml.StartElement) error { 
    dateString := fmt.Sprintf("\"%v\"", time.Time(d).Format("2006-01-02"))  
    e.EncodeElement(dateString, start) 

    return nil 
} 

bir referans olarak this SO kullanarak, ancak bir hata olduğu - & xml.UnsupportedTypeError {Tip: (* reflect.rtype)} - atılır.

Bir şeyleri özledim, herhangi bir fikir?

cevap

5

Yanlış arabirimi uyguluyorsunuz.

type MarshalerAttr interface { 
    MarshalXMLAttr(name Name) (Attr, error) 
} 

Yani muhtemelen böyle bir kod eklemeniz gerekir: (xml:"DOB,attr" etiketinden gösterildiği gibi) Tarih türü öznitelik olarak konmasını içindir yana

, bu xml.MarshalerAttr arabirimini uygulaması gerekmektedir:

func (d Date) MarshalXMLAttr(name xml.Name) (xml.Attr, error) { 
    dateString := time.Time(d).Format("2006-01-02")  
    attr := xml.Attr { 
     name, 
     dateString, 
    } 

    return attr, nil 
} 

Görünen gereksiz tırnakları değer dizesinden kaldırdığımı unutmayın.