Klistra in Go till vänster och klicka på "Konvertera" — så gör vi det till XMLKlistra in Go-kod

Vad det här verktyget gör

Har du någonsin behövt snickra ihop en XML-payload som matchar en Go-struct — för en SOAP-klient, ett RSS-flöde, en legacy SaaS-webhook eller en leverantörssitemap — så vet du hur pilligt det är. Du kan anropa xml.Marshal själv, men då handlar det om att kugga ihop main.go, kompilera och granska utskriften med ögat. Klistra in Go:n här i stället så får du välformad XML i ett steg. En struct, en fil med flera, eller en literal du klippt ur Go by Example — samma sak: ett komplett XML-dokument där alla fält är med.

Det speglar vad paketet encoding/xml faktiskt skulle producera. En tagg som xml:"OrderId,attr" gör fältet till ett attribut på föräldern; xml:"-" tar bort det; xml:",omitempty" utelämnar elementet när värdet är nollvärdet; xml:"Items>OrderItem" lindar in slicen i en <Items>-container med ett <OrderItem> per element; xml:",chardata" lägger värdet som textinnehåll. XMLName xml.Name byter namn på själva elementet. Pekar-fält med nil skrivs bara som tomma element när ,omitempty saknas — exakt som standardbiblioteket beter sig.

Skalärer hanteras som Go skulle gjort: float64 skrivs utan vetenskaplig notation när det får plats, time.Time använder RFC 3339, booleanska värden är gement true/false, och int/uint utan padding. Nästade structar blir nästade element. Slicear av structar blir upprepade element på samma nivå. Map:ar stöds inte nativt av encoding/xml — de plattas ut till upprepade barn <Entry><Key/><Value/></Entry> så formen är vettig. Skriver du idiomatisk Go? Stilguiden i Effective Go är en bra referens för mönstren som det här verktyget förväntar sig.

Så här använder du det

Tre steg. Funkar likadant om du klistrar in en struct eller en hel package-fil.

1

Klistra in ditt Go (eller prova exemplet)

Släng in ditt Go i vänstra editorn som det är. En enda struct-deklaration, en hel fil med imports och flera typer, eller en composite literal som order := Order{...} — allt funkar. Klicka på Ladda exempel för ett realistiskt fall först.

Du behöver inte plocka bort package-raden, ta bort imports eller städa filen. Klistra in den som gofmt spottar ut den. Struct-taggar med backticks är väntade.

2

Tryck Konvertera

Klicka på den gröna Konvertera-knappen. Verktyget läser Go:n, respekterar varje xml-structtagg och bygger XML:en i ett svep. Du ser en kort laddningsindikator medan det rullar.

3

Kopiera XML:en

Högerpanelen fylls med indenterad, välformad XML som en standardkompatibel XML-parser accepterar. Kopiera in i ditt SOAP-kuvert, config-fil, testfixtur eller API-dokumentation.

När det här faktiskt hjälper

Bygga SOAP-klientfixturer

Du pratar med ett legacy enterprise SOAP-API från en Go-tjänst. Klistra in request-structen, få ut XML-bodyn färdig för SoapUI, Postman eller testsuiten.

RSS- och Atom-flöden

En feed-struct med Channel, Item och enclosure-fält blir en fungerande RSS- eller Atom-mall — behändigt för att kolla taggstrukturen innan du kopplar in handlern.

Leverantörs-configfiler

Vissa SaaS-verktyg äter fortfarande XML-config (tänk sitemaps, loggpipelines, gamla ops-konsoler). Klistra in Go-config-structen, släng in XML:en direkt.

Håll dokumentationen ärlig

Generera XML-exempel för en README eller API-referens utifrån de faktiska Go-typerna så att exemplen aldrig driver isär från koden som åker in i main.

Vanliga frågor

Kan jag klistra in flera structar samtidigt?

Ja — klistra in hela filen. Roten upptäcks från composite literal (t.ex. order := Order{...}) när det finns, annars från den första structen som refererar de andra. Nästade och syskon-structar kommer genom som nästade element eller separata fragment, så inget försvinner tyst.

Respekterar det struct-taggar som xml:"x,attr", xml:"-" och xml:",omitempty"?

Ja — och alla vanliga varianter. xml:"name" byter namn på elementet, xml:"name,attr" skriver ut det som attribut på föräldern, xml:"-" tar bort fältet helt, xml:",omitempty" hoppar över fält med nollvärde, xml:"a>b" lindar slicen i en <a>-container med ett <b> per element, xml:",chardata" lägger värdet som elementtext och xml:",innerxml" skickas vidare som rå XML. Det matchar beteendet som dokumenteras i encoding/xml Marshal-referensen.

Hur är det med det speciella XMLName-fältet?

Ett fält av typen xml.Name med namnet XMLName byter namn på rotelementet. XMLName xml.Name `xml:"Order"` ger <Order>...</Order>. Utan det använder verktyget structtypens namn som rot — samma default som xml.Marshal.

Hur hanterar det pekare, slicear och map:ar?

Pekar-fält med nil skrivs som ett tomt element om inte ,omitempty är satt — då hoppas de över. Slicear av structar blir upprepade syskon-element (eller lindade i en container om taggen använder formen a>b). Map:ar hanteras inte nativt av encoding/xml, så verktyget skriver dem som en serie barn <Entry><Key/><Value/></Entry> — gott nog i de flesta fall, och så pass explicit att du kan justera formen själv om det behövs.

Sparas min kod?

Din kod skickas till backend för konvertering och sparas inte — vi loggar inte payloaden. Standardpåminnelse för onlineverktyg: om koden är genuint känslig, titta igenom den innan du klistrar.

Vad händer om structen använder typer som encoding/xml inte stödjer — channels, funcs, complex?

De skrivs som tomma element i stället för att få hela konverteringen att gå sönder, i linje med vad xml.Marshal skulle göra i runtime (den returnerar ett fel; verktyget går vidare så du får åtminstone resten). Har själva Go:n ett syntaxfel, fixa de uppenbara först — parsern är förlåtande men inte en komplett gc.

Andra verktyg du kan behöva

Go till XML är bara en pusselbit. De här verktygen passar bra ihop med det: