Sola Go yapıştır ve "Dönüştür"e bas — biz XML’e çeviririzGo kodu yapıştır

Bu araç ne işe yarar

Hiç bir Go struct’ına uyan bir XML payload hazırlamak zorunda kaldıysan — bir SOAP client, bir RSS feed, eski bir SaaS webhook’u ya da bir vendor sitemap’ı için — ne kadar zahmetli olduğunu zaten biliyorsun. xml.Marshal’ı kendin çağırabilirsin ama bu main.go kurmak, derlemek ve çıktıyı gözle kontrol etmek demek. Onun yerine Go’yu buraya yapıştır, tek adımda iyi biçimli XML geri gelsin. Tek struct, içinde birkaç tane olan bir dosya ya da Go by Example’dan kopyalayıp yapıştırdığın bir literal — aynı hikaye: her alanı korunan eksiksiz bir XML belgesi.

encoding/xml paketinin gerçekten üreteceği çıktıyı yansıtır. xml:"OrderId,attr" gibi bir tag alanı parent üzerinde bir attribute’e çevirir; xml:"-" düşürür; xml:",omitempty" değer zero value iken elementi bırakmaz; xml:"Items>OrderItem" slice’ı <Items> konteynerine sarar ve her eleman için bir <OrderItem> koyar; xml:",chardata" değeri metin içeriği olarak yerleştirir. XMLName xml.Name elementin kendisini yeniden adlandırır. nil değerli pointer alanlar, yalnızca ,omitempty yoksa boş element olarak yazılır — tam olarak standart kütüphanenin davranışı.

Scalar’lar Go’nun işlediği gibi işlenir: float64 sığdığında bilimsel notasyonsuz yazılır, time.Time RFC 3339 kullanır, boolean’lar küçük harfle true/false’tir ve int/uint padding olmadan çıkar. İç içe struct’lar iç içe elementlere döner. Struct slice’ları aynı seviyede tekrarlayan elementler olur. Map’ler encoding/xml tarafından native olarak desteklenmez — şekil anlamlı kalsın diye tekrarlayan <Entry><Key/><Value/></Entry> alt elementlerine düzleştirilir. Idiyomatik Go yazıyorsan, Effective Go’daki stil rehberi bu aracın beklediği kalıplar için iyi bir referans.

Nasıl kullanılır

Üç adım. Tek bir struct yapıştırsan da tüm bir paket dosyası yapıştırsan da aynı şekilde çalışır.

1

Go’nu yapıştır (ya da örneği dene)

Go’nu soldaki editöre olduğu gibi bırak. Tek bir struct tanımı, import’ları ve birden çok tipi olan bütün bir dosya ya da order := Order{...} gibi bir composite literal — hepsi çalışır. Önce gerçekçi bir örnek için Örneği Yükle’ye bas.

package satırını kaldırmana, import’ları silmene ya da dosyayı düzenlemene gerek yok. gofmt’tan çıktığı gibi yapıştır. Backtick’li struct tag’leri beklenen bir durumdur.

2

Dönüştür’e bas

Yeşil Dönüştür düğmesine tıkla. Araç Go’yu okur, her xml struct tag’ine uyar ve XML’i tek seferde kurar. Çalışırken kısa bir yükleme göstergesi görürsün.

3

XML’i kopyala

Sağ panel, standartlara uygun bir XML parser’ın kabul edeceği girintili, iyi biçimli XML ile dolar. SOAP zarfına, config dosyana, test fixture’ına ya da API dokümantasyonuna doğrudan kopyala.

Gerçekten işe yaradığı yerler

SOAP client fixture’ları hazırlamak

Bir Go servisinden eski bir kurumsal SOAP API ile konuşuyorsun. Request struct’ını yapıştır, SoapUI, Postman ya da test suite için hazır XML body’yi al.

RSS ve Atom feed’leri

Channel, Item ve enclosure alanları olan bir feed struct’ı çalışan bir RSS ya da Atom şablonuna dönüşür — handler’ı yazmadan önce tag düzenini kontrol etmek için pratik.

Vendor config dosyaları

Bazı SaaS araçları hâlâ XML config yiyor (sitemap’lar, logging pipeline’ları, eski ops konsolları). Go config struct’ını yapıştır, XML’i doğrudan al.

Dokümanı dürüst tutmak

Bir README ya da API referansı için XML örneklerini gerçek Go tiplerinden üret, böylece örnekler main’e düşen koddan hiç kopmaz.

Sık sorulan sorular

Aynı anda birden çok struct yapıştırabilir miyim?

Evet — tüm dosyayı yapıştır. Kök, varsa composite literal’dan (örn. order := Order{...}) algılanır; yoksa diğerlerine referans veren ilk struct’tan. İç içe ve kardeş struct’lar iç içe element ya da ayrı parçalar olarak geçer, yani hiçbir şey sessizce kaybolmaz.

xml:"x,attr", xml:"-" ve xml:",omitempty" gibi struct tag’lerine uyuyor mu?

Evet — ve tüm yaygın varyantlarına. xml:"name" elementi yeniden adlandırır, xml:"name,attr" parent üzerinde attribute olarak yazar, xml:"-" alanı tamamen düşürür, xml:",omitempty" zero-value alanları atlar, xml:"a>b" slice’ı <a> konteynerine sarıp her eleman için bir <b> koyar, xml:",chardata" değeri element metni yapar ve xml:",innerxml" ham XML olarak geçirilir. encoding/xml Marshal referansındaki davranışla uyumludur.

Özel XMLName alanı nasıl peki?

XMLName adlı xml.Name tipindeki bir alan kök elementi yeniden adlandırır. XMLName xml.Name `xml:"Order"`, <Order>...</Order> üretir. Olmazsa, araç kök olarak struct tip adını kullanır — xml.Marshal ile aynı varsayılan.

Pointer, slice ve map’leri nasıl ele alıyor?

nil pointer alanlar, ,omitempty yoksa boş element yazar; varsa atlanır. Struct slice’ları tekrarlayan kardeş elementlere döner (tag a>b biçimindeyse bir konteynerde sarılır). Map’ler encoding/xml tarafından native işlenmediği için araç onları bir dizi <Entry><Key/><Value/></Entry> alt elementi olarak yazar — çoğu durumda yeterli ve başka bir biçim istersen elle düzeltebileceğin kadar açık.

Kodum saklanıyor mu?

Kodun dönüşüm için backend’e gönderilir ve kalıcılaştırılmaz — payload’ı loglamıyoruz. Çevrim içi araçlar için standart uyarı: kod gerçekten hassassa, yapıştırmadan önce bir göz at.

Struct, encoding/xml’in desteklemediği tipler kullanıyorsa — channel, func, complex?

Bunlar, tüm dönüşümü başarısız kılmak yerine boş element olarak yazılır; runtime’da xml.Marshal’ın yapacağı şeye benzer (o bir hata döner; araç devam eder ki en azından geri kalanı alırsın). Go’nun kendisinde syntax hatası varsa önce bariz olanları düzelt — parser hoşgörülü ama tam bir gc değil.

İhtiyacın olabilecek diğer araçlar

Go’dan XML’e bulmacanın bir parçası. Bu araçlar onunla iyi gider: