Go:
Arbeider med XML
Hvordan:
Parse XML i Go
For å parse XML i Go, bruker du encoding/xml
-pakken. Denne pakken gir de nødvendige verktøyene for å unmarshal (parse) XML til Go-strukturer. For eksempel, vurder følgende XML-data som representerer en bok:
<book id="123">
<title>Læring med Go</title>
<author>John Doe</author>
<pages>359</pages>
</book>
For å parse dette, definerer du en struktur som speiler XML-strukturen:
package main
import (
"encoding/xml"
"fmt"
"os"
)
type Book struct {
XMLName xml.Name `xml:"book"`
ID string `xml:"id,attr"`
Title string `xml:"title"`
Author string `xml:"author"`
Pages int `xml:"pages"`
}
func main() {
data := []byte(`
<book id="123">
<title>Læring med Go</title>
<author>John Doe</author>
<pages>359</pages>
</book>
`)
var book Book
err := xml.Unmarshal(data, &book)
if err != nil {
panic(err)
}
fmt.Printf("Bok: %+v\n", book)
}
Output:
Bok: {XMLName:{Space: Local:book} ID:123 Title:Læring med Go Author:John Doe Pages:359}
Generere XML i Go
For å generere et XML-dokument fra Go-datastrukturer, bruker du igjen encoding/xml
-pakken. Denne gangen marshaller du Go-strukturer til XML. Gitt den tidligere Book
-strukturen:
package main
import (
"encoding/xml"
"fmt"
"os"
)
func main() {
book := &Book{
ID: "123",
Title: "Læring med Go",
Author: "John Doe",
Pages: 359,
}
output, err := xml.MarshalIndent(book, "", " ")
if err != nil {
panic(err)
}
fmt.Println(xml.Header + string(output))
}
Output:
<?xml version="1.0" encoding="UTF-8"?>
<book id="123">
<title>Læring med Go</title>
<author>John Doe</author>
<pages>359</pages>
</book>
Dypdykk
XMLs verbosehet og kompleksitet har ført til at JSON og andre formater har blitt mer populære for mange applikasjoner. Imidlertid sikrer XMLs evne til å representere komplekse hierarkiske data og dens utbredte bruk i arvesystemer og spesifikke domener (f.eks., SOAP-tjenester) dets relevans.
encoding/xml
-pakken i Go gir kraftfulle mekanismer for arbeid med XML, men det er verdt å merke seg dens begrensninger. For eksempel, kan håndtering av XML-navnerom være tungvint og kan kreve en mer detaljert forståelse av XML-spesifikasjonen enn for enklere brukstilfeller. I tillegg, selv om Gos statiske typografi og encoding/xml
-pakkens marshaling- og unmarshaling-kapasiteter generelt er effektive, kan utviklere støte på utfordringer med dypt nøstede strukturer eller når de håndterer XML-dokumenter som ikke kartlegger pent på Gos typesystem.
For de fleste moderne applikasjoner er alternativer som JSON enklere og mer effektive. Men når du jobber i kontekster som krever XML - på grunn av arvesystemer, spesifikke industrielle standarder, eller komplekse datarepresentasjonsbehov - gir Gos standardbibliotek robuste verktøy for å få jobben gjort. Som alltid avhenger det beste valget av dataformat av de spesifikke kravene til applikasjonen og miljøet.