Es posible crear un archivo XML en Golang a partir de un struct, te mostraremos como hacerlo. Desde luego es posible crear un XML simplemente generando una cadena con los nodos que requieras y para después escribirla en un archivo, pero con el método siguiente estarás seguro de que tu estructura de nodos estará bien formada y utilizarás una de las características para el manejo datos más potente de Golang.
Puedes copiar y probar el siguiente código:
package main
import (
"encoding/xml"
"fmt"
"log"
"os"
)
//decodigo.com
type Usuario struct {
XMLName xml.Name `xml:"usuario"`
Id int `xml:"id,attr"`
Nombre string `xml:"nombre"`
Username string `xml:"username"`
Password string `xml:"password"`
Email string `xml:"email"`
}
func main() {
usuario := &Usuario{Id: 1, Nombre: "Jose", Username: "jose", Password: "123", Email: "correo@prueba.com"}
out, _ := xml.MarshalIndent(usuario, " ", " ")
fmt.Println(string(out))
f, err := os.Create("/home/decodigo/Documentos/go/archivos/archivo.xml")
if err != nil {
log.Fatal(err)
}
defer f.Close()
_, err2 := f.WriteString(string(out))
if err2 != nil {
log.Fatal(err2)
}
fmt.Println("listo")
}
En el primer bloque de código definimos la estructura que queremos convertir a nodos de XML:
type Usuario struct {
XMLName xml.Name `xml:"usuario"`
Id int `xml:"id,attr"`
Nombre string `xml:"nombre"`
Username string `xml:"username"`
Password string `xml:"password"`
Email string `xml:"email"`
}
Nuestro struct Usuario tiene varios elementos. Si estos elementos serán atributos en una etiqueta, deben estar indicados como en el caso del Id, después del tipo de dato , con la cadena «attr» después de la coma.xml:"id,attr"
Los demás nodos que contienen información deben indicar el nombre que tendrán las etiquetas delimitadoras, como en el caso del Nombre: xml:»username».
Posteriormente usamos MarshalIndent del paquete encoding/xml.
out, _ := xml.MarshalIndent(usuario, " ", " ")
En las siguientes líneas creamos, escribimos y cerramos nuestro archivo de texto con extensión «.xml«
f, err := os.Create("/home/decodigo/Documentos/go/archivos/archivo.xml")
if err != nil {
log.Fatal(err)
}
defer f.Close()
_, err2 := f.WriteString(string(out))
if err2 != nil {
log.Fatal(err2)
}
fmt.Println("listo")
Desde luego, tu debes cambiar la ruta donde se desees que se genere el archivo. Al ejecutar el ejemplo generarás un archivo XML como el que se muestra a continuación:

Este ejemplo para crear un archivo XML en Golang es sencillo, desde luego el archivo final puede ser tan complejo como desees, siempre y cuando definas correctamente los sctucts que necesites convertir a XML.
Ver más: https://golang.org/doc/
Más información en inglés: https://geekole.com/create-an-xml-file-in-golang/