Incolla Go a sinistra e clicca su "Converti" — lo trasformiamo in XMLIncolla codice Go

Cosa fa questo strumento

Se hai mai dovuto costruire un payload XML che aderisce a uno struct Go — per un client SOAP, un feed RSS, un webhook di un SaaS legacy o una sitemap di un fornitore — sai quanto sia fastidioso. Puoi chiamare xml.Marshal da solo, ma significa mettere insieme main.go, compilare e controllare l'output a occhio. Incolla invece il Go qui e ottieni XML ben formato in un passaggio. Uno struct, un file con parecchi, o un literal copiato da Go by Example — stesso trattamento: un documento XML completo con ogni campo preservato.

Rispecchia quello che il package encoding/xml produrrebbe davvero. Un tag come xml:"OrderId,attr" trasforma il campo in un attributo del padre; xml:"-" lo scarta; xml:",omitempty" lascia fuori l'elemento quando il valore è lo zero value; xml:"Items>OrderItem" avvolge lo slice in un contenitore <Items> con un <OrderItem> per elemento; xml:",chardata" mette il valore come contenuto testuale. XMLName xml.Name rinomina l'elemento stesso. I campi puntatore con nil sono emessi come elementi vuoti solo quando manca ,omitempty — esattamente come si comporta la libreria standard.

Gli scalari sono gestiti come farebbe Go: float64 esce senza notazione scientifica quando ci sta, time.Time usa RFC 3339, i booleani sono true/false minuscoli, e int/uint senza padding. Gli struct annidati diventano elementi annidati. Le slice di struct diventano elementi ripetuti sullo stesso livello. Le map non sono supportate nativamente da encoding/xml — vengono appiattite in figli ripetuti <Entry><Key/><Value/></Entry>, così la forma resta sensata. Scrivi Go idiomatico? La guida di stile Effective Go è un buon riferimento per i pattern che questo strumento si aspetta.

Come si usa

Tre passi. Funziona uguale sia che tu incolli uno struct o un file di package intero.

1

Incolla il tuo Go (o prova l'esempio)

Butta il tuo Go nell'editor di sinistra così com'è. Una singola dichiarazione di struct, un file intero con import e più tipi, o un composite literal come order := Order{...} — tutto valido. Clicca Carica esempio prima, per un caso realistico.

Non serve togliere la riga package, rimuovere gli import o sistemare il file. Incollalo così come esce da gofmt. I tag di struct con backtick sono attesi.

2

Premi Converti

Clicca il bottone verde Converti. Lo strumento legge il Go, rispetta ogni tag xml dello struct e costruisce l'XML in una passata. Vedrai un breve indicatore di caricamento mentre gira.

3

Copia l'XML

Il pannello di destra si riempie con XML indentato e ben formato che un parser XML conforme allo standard accetterà. Copialo nella tua busta SOAP, file di config, fixture di test o documentazione API.

Quando serve davvero

Creare fixture di client SOAP

Stai parlando con una API SOAP enterprise legacy da un servizio Go. Incolla lo struct della request, ottieni il body XML pronto per SoapUI, Postman o la test suite.

Feed RSS e Atom

Uno struct di feed con campi Channel, Item ed enclosure diventa un template RSS o Atom funzionante — utile per controllare la disposizione dei tag prima di cablare l'handler.

File di config di fornitori

Alcuni SaaS mangiano ancora config in XML (pensa a sitemap, pipeline di logging, console ops legacy). Incolla lo struct di config Go e butta l'XML direttamente.

Tenere la doc onesta

Genera esempi XML per un README o una referenza API dai veri tipi Go, così gli esempi non si disallineano mai dal codice che arriva in main.

Domande comuni

Posso incollare più struct insieme?

Sì — incolla tutto il file. La radice è rilevata dal composite literal (es. order := Order{...}) quando è presente, o dal primo struct che referenzia gli altri. Gli struct annidati e fratelli escono come elementi annidati o frammenti separati, quindi niente va perso in silenzio.

Rispetta i tag di struct come xml:"x,attr", xml:"-" e xml:",omitempty"?

Sì — e tutte le varianti comuni. xml:"name" rinomina l'elemento, xml:"name,attr" lo emette come attributo sul padre, xml:"-" scarta completamente il campo, xml:",omitempty" salta i campi con zero value, xml:"a>b" avvolge la slice in un contenitore <a> con un <b> per elemento, xml:",chardata" mette il valore come testo dell'elemento, e xml:",innerxml" passa come XML grezzo. Corrisponde al comportamento documentato nel riferimento encoding/xml Marshal.

E il campo speciale XMLName?

Un campo di tipo xml.Name chiamato XMLName rinomina l'elemento radice. XMLName xml.Name `xml:"Order"` produce <Order>...</Order>. Senza, lo strumento usa il nome del tipo dello struct come radice — lo stesso default di xml.Marshal.

Come gestisce puntatori, slice e map?

I campi puntatore con nil emettono un elemento vuoto a meno che non ci sia ,omitempty, nel qual caso vengono saltati. Le slice di struct diventano elementi fratelli ripetuti (o avvolti in un contenitore se il tag usa la forma a>b). Le map non sono gestite nativamente da encoding/xml, quindi lo strumento le emette come una serie di figli <Entry><Key/><Value/></Entry> — sufficiente per la maggior parte dei casi e abbastanza esplicito da poter essere modificato se ti serve un'altra forma.

Il mio codice viene salvato?

Il tuo codice viene inviato al backend per la conversione e non viene persistito — non logghiamo il payload. Avviso standard per strumenti online: se il codice è davvero sensibile, dagli un'occhiata prima di incollarlo.

E se lo struct usa tipi non supportati da encoding/xml — channel, func, complex?

Vengono emessi come elementi vuoti invece di far fallire l'intera conversione, in linea con quello che farebbe xml.Marshal a runtime (restituisce un errore; lo strumento prosegue così prendi almeno il resto). Se il Go ha un errore di sintassi, sistema prima quelli ovvi — il parser è tollerante ma non è un gc completo.

Altri strumenti che potrebbero servire

Go a XML è solo un pezzo del puzzle. Questi strumenti si abbinano bene: