Marshalling XML Go XMLName + xmlns

I had a similar question. The docs for the Unmarshal method (http://golang.org/pkg/encoding/xml/#Unmarshal) have:

If the XMLName field has an associated tag of the form "name" or "namespace-URL name", the XML element must have the given name (and, optionally, name space) or else Unmarshal returns an error.

Using "namespace-URL name" in the struct tag:

type ZoneRequest struct {
    XMLName  xml.Name `xml:"https://route53.amazonaws.com/doc/2012-12-12/ CreateHostedZoneRequest"`
}

Should produce:

<CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2012-12-12/">

You can do this, which possibly isn't the most elegant solution, but seems to work

Playground link

type ZoneRequest struct {
    Name            string
    CallerReference string
    Comment         string `xml:"HostedZoneConfig>Comment"`
    Xmlns           string `xml:"xmlns,attr"`
}

var zoneRequest = ZoneRequest{
    Name:            "DNS domain name",
    CallerReference: "unique description",
    Comment:         "optional comment",
    Xmlns:           "https://route53.amazonaws.com/doc/2012-12-12/",
}

Producing

<?xml version="1.0" encoding="UTF-8"?>

<CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2012-12-12/">
   <Name>DNS domain name</Name>
   <CallerReference>unique description</CallerReference>
   <HostedZoneConfig>
      <Comment>optional comment</Comment>
   </HostedZoneConfig>
</CreateHostedZoneRequest>