encoding/xml
Trabalhe com XML
encoding/xml é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
Trabalhando com XML
XML é um formato detalhado, baseado em tags, ainda comum em sistemas legados e arquivos de configuração. O pacote encoding/xml do Go faz marshal e unmarshal de XML, de forma semelhante ao pacote json.
Marshal para XML
xml.Marshal transforma um valor Go em bytes XML.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
Name string
Age int
}
func main() {
b, _ := xml.Marshal(User{"Ann", 30})
fmt.Println(string(b))
}Tags XML
A tag xml controla os nomes dos elementos, assim como as tags json controlam as chaves JSON.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
Name string "xml:\"name\""
}
func main() {
b, _ := xml.Marshal(User{"Ann"})
fmt.Println(string(b))
}Elemento raiz com XMLName
Um campo do tipo xml.Name chamado XMLName define o nome do elemento raiz.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
XMLName xml.Name "xml:\"user\""
Name string "xml:\"name\""
}
func main() {
b, _ := xml.Marshal(User{Name: "Ann"})
fmt.Println(string(b))
}Atributos
Adicione ,attr a uma tag para renderizar um campo como um atributo XML em vez de um elemento filho.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
XMLName xml.Name "xml:\"user\""
ID int "xml:\"id,attr\""
Name string "xml:\"name\""
}
func main() {
b, _ := xml.Marshal(User{ID: 7, Name: "Ann"})
fmt.Println(string(b))
}Unmarshal de XML
xml.Unmarshal analisa bytes XML em um ponteiro, associando os nomes dos elementos às tags.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
Name string "xml:\"name\""
}
func main() {
var u User
xml.Unmarshal([]byte("<User><name>Bob</name></User>"), &u)
fmt.Println(u.Name)
}Elementos aninhados
Estruturas aninhadas correspondem a elementos XML aninhados, formando uma árvore.
package main
import (
"encoding/xml"
"fmt"
)
type Address struct {
City string "xml:\"city\""
}
type User struct {
Name string "xml:\"name\""
Address Address "xml:\"address\""
}
func main() {
b, _ := xml.Marshal(User{"Ann", Address{"Rome"}})
fmt.Println(string(b))
}XML formatado
xml.MarshalIndent formata a saída com indentação para facilitar a leitura.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
Name string "xml:\"name\""
}
func main() {
b, _ := xml.MarshalIndent(User{"Ann"}, "", " ")
fmt.Println(string(b))
}Elementos repetidos
Um campo de fatia se torna uma série de elementos XML repetidos, um para cada item.
package main
import (
"encoding/xml"
"fmt"
)
type List struct {
Items []string "xml:\"item\""
}
func main() {
b, _ := xml.Marshal(List{Items: []string{"a", "b"}})
fmt.Println(string(b))
}JSON versus XML
As APIs são correspondentes: Marshal, Unmarshal, MarshalIndent e tags de estrutura. XML adiciona atributos e o conceito de raiz XMLName. Prefira JSON para APIs novas; XML para sistemas legados.
Declaração de cabeçalho
A constante xml.Header contém a cadeia de caracteres de declaração XML padrão, que você pode anexar ao início da saída para obter documentos completos.
package main
import (
"encoding/xml"
"fmt"
)
func main() {
fmt.Print(xml.Header)
}Verificação rápida
O que a opção ,attr faz em uma tag de estrutura xml?
Recapitulação
encoding/xml:
xml.Marshal/Unmarshalcorrespondem à API json- As tags xml nomeiam elementos;
,attrcria atributos XMLNamedefine a raiz; as fatias repetem elementos
Perguntas Frequentes
A aula “encoding/xml” é grátis?
Sim — o texto completo de “encoding/xml” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “encoding/xml”?
Trabalhe com XML Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “encoding/xml”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.