Lim inn Go til venstre og klikk "Konverter" — så lager vi XML av detLim inn Go-kode

Hva dette verktøyet gjør

Har du noen gang måttet rigge opp en XML-payload som passer til en Go-struct — for en SOAP-klient, en RSS-feed, en gammel SaaS-webhook eller et leverandørsitemap — så vet du hvor pirkete det er. Du kan kalle xml.Marshal selv, men da må du sette sammen main.go, kompilere og se over output med øynene. Lim inn Go-en her i stedet, og du får velformet XML i ett steg. Én struct, en fil med flere, eller en literal du klippet ut fra Go by Example — samme greie: et komplett XML-dokument der hvert felt er bevart.

Det speiler hva pakken encoding/xml faktisk ville produsert. En tag som xml:"OrderId,attr" gjør feltet om til et attributt på forelderen; xml:"-" fjerner det; xml:",omitempty" lar elementet være ute når verdien er null-verdien; xml:"Items>OrderItem" pakker slicen inn i en <Items>-container med ett <OrderItem> per element; xml:",chardata" legger verdien som tekstinnhold. XMLName xml.Name gir nytt navn til selve elementet. Peker-felt med nil sendes ut som tomme elementer kun når ,omitempty mangler — akkurat slik standardbiblioteket oppfører seg.

Skalarer håndteres slik Go ville gjort det: float64 skrives uten vitenskapelig notasjon når det får plass, time.Time bruker RFC 3339, boolske verdier er små true/false, og int/uint kommer ut uten padding. Nestede struct-er blir til nestede elementer. Slicer av struct-er blir til gjentatte elementer på samme nivå. Map-er er ikke nativt støttet av encoding/xml — de flates ut til gjentatte barn <Entry><Key/><Value/></Entry> slik at formen fortsatt gir mening. Skriver du idiomatisk Go? Stilguiden i Effective Go er en god referanse for mønstrene dette verktøyet forventer.

Slik bruker du det

Tre steg. Funker likt enten du limer inn én struct eller en hel package-fil.

1

Lim inn Go-koden din (eller prøv eksemplet)

Slenge Go-en inn i venstre editor sånn som den er. En enkelt struct-deklarasjon, en hel fil med imports og flere typer, eller en composite literal som order := Order{...} — alt funker. Klikk på Last inn eksempel for et realistisk tilfelle først.

Du trenger ikke fjerne package-linjen, ta bort imports eller rydde opp i fila. Lim den inn slik den kommer ut av gofmt. Struct-tags med backticks er forventet.

2

Trykk Konverter

Klikk på den grønne Konverter-knappen. Verktøyet leser Go-en, respekterer hver xml-struct-tag og bygger XML-en i én slurk. Du ser en kort laste-indikator mens det går.

3

Kopier XML-en

Høyre panel fylles med innrykket, velformet XML som en standardkompatibel XML-parser godtar. Kopier inn i SOAP-konvolutten, config-fila, testfixture eller API-dokumentasjonen.

Når dette faktisk hjelper

Bygge SOAP-klient-fixturer

Du prater med et gammelt enterprise SOAP-API fra en Go-tjeneste. Lim inn request-structen, få XML-body-en klar til SoapUI, Postman eller test-suiten.

RSS- og Atom-feeder

En feed-struct med Channel-, Item- og enclosure-felt blir til en fungerende RSS- eller Atom-mal — kjekt for å sjekke tag-oppsettet før du kobler på handleren.

Leverandør-config-filer

Noen SaaS-verktøy spiser fortsatt XML-config (tenk sitemaps, logging-pipelines, gamle ops-konsoller). Lim inn Go-config-structen, slipp XML-en rett videre.

Hold dokumentasjonen ærlig

Generer XML-eksempler til en README eller API-referanse ut fra de faktiske Go-typene, slik at eksemplene aldri driver ut av takt med koden som havner på main.

Vanlige spørsmål

Kan jeg lime inn flere struct-er på én gang?

Ja — lim inn hele fila. Roten oppdages fra composite literalen (f.eks. order := Order{...}) når den finnes, ellers fra den første structen som refererer til de andre. Nestede og søsken-structer kommer gjennom som nestede elementer eller separate fragmenter, så ingenting forsvinner i stillhet.

Respekterer det struct-tags som xml:"x,attr", xml:"-" og xml:",omitempty"?

Ja — og alle de vanlige variantene. xml:"name" gir elementet nytt navn, xml:"name,attr" skriver det som attributt på forelderen, xml:"-" fjerner feltet helt, xml:",omitempty" hopper over felt med null-verdi, xml:"a>b" pakker slicen inn i en <a>-container med ett <b> per element, xml:",chardata" legger verdien som elementtekst, og xml:",innerxml" sendes videre som rå XML. Det samsvarer med oppførselen dokumentert i encoding/xml Marshal-referansen.

Hva med det spesielle XMLName-feltet?

Et felt av typen xml.Name med navnet XMLName gir rot-elementet nytt navn. XMLName xml.Name `xml:"Order"` gir <Order>...</Order>. Uten det bruker verktøyet struct-type-navnet som rot — samme default som xml.Marshal.

Hvordan håndterer det pekere, slicer og map-er?

Peker-felt med nil sender ut et tomt element med mindre ,omitempty er satt — da hoppes de over. Slicer av struct-er blir til gjentatte søsken-elementer (eller pakkes i en container hvis taggen bruker a>b-formen). Map-er håndteres ikke nativt av encoding/xml, så verktøyet sender dem ut som en serie barn <Entry><Key/><Value/></Entry> — bra nok i de fleste tilfeller, og tydelig nok til å redigere om du vil ha en annen form.

Lagres koden min?

Koden sendes til backenden for konvertering og blir ikke persistert — vi logger ikke payloaden. Standardadvarsel for nettverktøy: er koden virkelig sensitiv, ta en kikk på den før du limer inn.

Hva om structen bruker typer encoding/xml ikke støtter — channels, funcs, complex?

De sendes ut som tomme elementer i stedet for å velte hele konverteringen, på linje med hva xml.Marshal ville gjort i runtime (den returnerer en feil; verktøyet går videre slik at du i det minste får resten). Har selve Go-en en syntaksfeil, fiks de åpenbare først — parseren er raus, men ikke en fullverdig gc.

Andre verktøy du kan få bruk for

Go til XML er bare én brikke i puslespillet. Disse verktøyene passer godt sammen med det: