Go:
Att arbeta med XML
Hur man gör:
Tolka XML i Go
För att tolka XML i Go använder du paketet encoding/xml
. Detta paket tillhandahåller nödvändiga verktyg för att avkoda (tolka) XML till Go-strukturer. Betrakta till exempel följande XML-data som representerar en bok:
<book id="123">
<title>Lär dig Go</title>
<author>John Doe</author>
<pages>359</pages>
</book>
För att tolka detta definierar du en struktur som speglar 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är dig 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)
}
Utskrift:
Bok: {XMLName:{Space: Local:book} ID:123 Title:Lär dig Go Author:John Doe Pages:359}
Generera XML i Go
För att generera ett XML-dokument från Go-datastrukturer använder du återigen paketet encoding/xml
. Den här gången omvandlar du Go-strukturer till XML. Med tanke på den tidigare Book
-strukturen:
package main
import (
"encoding/xml"
"fmt"
"os"
)
func main() {
book := &Book{
ID: "123",
Title: "Lär dig Go",
Author: "John Doe",
Pages: 359,
}
output, err := xml.MarshalIndent(book, "", " ")
if err != nil {
panic(err)
}
fmt.Println(xml.Header + string(output))
}
Utskrift:
<?xml version="1.0" encoding="UTF-8"?>
<book id="123">
<title>Lär dig Go</title>
<author>John Doe</author>
<pages>359</pages>
</book>
Djupdykning
XML:s ordfyllnad och komplexitet har lett till att JSON och andra format har blivit populärare för många applikationer. Dock säkerställer XML:s förmåga att representera komplex hierarkisk data och dess utbredda användning i äldre system och specifika domäner (t.ex. SOAP-tjänster) dess relevans.
Paketet encoding/xml
i Go erbjuder kraftfulla mekanismer för att arbeta med XML, men det är värt att notera dess begränsningar. Till exempel kan hantering av XML-namnrymder vara besvärligt och kan kräva en mer detaljerad förståelse för XML-specifikationen än för enklare användningsfall. Dessutom kan utvecklare stöta på utmaningar med djupt nästlade strukturer eller när de hanterar XML-dokument som inte passar snyggt in i Gos typsystem, även om Gos statiska typning och encoding/xml
-packetets kodnings- och avkodningsförmåga generellt sett är effektiva.
För de flesta moderna applikationer är alternativ som JSON enklare och mer effektiva. Men när man arbetar i sammanhang som kräver XML – på grund av äldre system, specifika branschstandarder eller komplexa datarepresentationsbehov – erbjuder Gos standardbibliotek robusta verktyg för att utföra jobbet. Som alltid beror valet av dataformat på de specifika kraven i applikationen och miljön.