0Pricing
Go Academy · Aula

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 / Unmarshal correspondem à API json
  • As tags xml nomeiam elementos; ,attr cria atributos
  • XMLName define 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.

Todas as aulas deste curso

  1. Revisão de encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob e codificação binária
← Voltar para Go Academy