encoding/xml
Lavorare con XML
encoding/xml è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Utilizzo di XML
XML è un formato prolisso basato su tag, ancora comune nei sistemi e nei file di configurazione legacy. Il pacchetto Go encoding/xml lo serializza e deserializza, in modo analogo al pacchetto json.
Marshal in XML
xml.Marshal converte un valore Go in byte 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))
}Tag XML
Il tag xml controlla i nomi degli elementi, proprio come i tag json controllano le chiavi 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 radice con XMLName
Un campo di tipo xml.Name chiamato XMLName imposta il nome dell'elemento radice.
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))
}Attributi
Aggiungere ,attr a un tag per rappresentare un campo come attributo XML anziché come elemento figlio.
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 di XML
xml.Unmarshal analizza i byte XML inserendoli in un puntatore e associa i nomi degli elementi ai tag.
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)
}Elementi annidati
Le struct annidate corrispondono a elementi XML annidati, formando un albero.
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 formattato
xml.MarshalIndent formatta l'output con l'indentazione per migliorarne la leggibilità.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
Name string "xml:\"name\""
}
func main() {
b, _ := xml.MarshalIndent(User{"Ann"}, "", " ")
fmt.Println(string(b))
}Elementi ripetuti
Un campo slice diventa una serie di elementi XML ripetuti, uno per ogni elemento.
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 e XML
Le API si corrispondono: Marshal, Unmarshal, MarshalIndent e tag delle struct. XML aggiunge gli attributi e il concetto di elemento radice XMLName. Per le nuove API è preferibile JSON; XML è adatto ai sistemi legacy.
Dichiarazione dell'header
La costante xml.Header contiene la stringa standard della dichiarazione XML, che è possibile anteporre all'output per ottenere documenti completi.
package main
import (
"encoding/xml"
"fmt"
)
func main() {
fmt.Print(xml.Header)
}Verifica rapida
Cosa fa l'opzione ,attr in un tag struct XML?
Riepilogo
encoding/xml:
xml.Marshal/Unmarshalrispecchiano l'API json- I tag xml assegnano il nome agli elementi;
,attrcrea attributi XMLNameimposta la radice; gli slice ripetono gli elementi
Domande Frequenti
La lezione «encoding/xml» è gratuita?
Sì — il testo completo di «encoding/xml» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «encoding/xml»?
Lavorare con XML Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «encoding/xml»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.