package main import ( "encoding/xml" "fmt" ) type Plant struct { XMLName xml.Name `xml:"fruit"` Id int `xml:"id,attr"` Name string `xml:"name"` Origin []string `xml:"origin"` } func (p Plant) String() string { return fmt.Sprintf("Fruit id=%v, name=%v, origin=%v", p.Id, p.Name, p.Origin) } func main() { coffee := &Plant{Id: 27, Name: "Coffee"} coffee.Origin = []string{"Ethiopia", "Brazil"} out, _ := xml.MarshalIndent(coffee, " ", " ") fmt.Println(string(out)) var p Plant if err := xml.Unmarshal(out, &p); err != nil { panic(err) } fmt.Println(p) }