Metin Dosyalarını Gömme
Metin dosyalarından bahsediyorsak, kolayca kaynak kodun içine gömülebilirler. Geriye dönük tırnak işaretlerini şu şekilde ifade etmek için kullanın string
:
const html = `
<html>
<body>Example embedded HTML content.</body>
</html>
`
// Sending it:
w.Write([]byte(html)) // w is an io.Writer
Optimizasyon ipucu:
Çoğu zaman kaynağı yalnızca bir'e yazmanız gerekeceğinden io.Writer
, bir []byte
dönüşümün sonucunu da saklayabilirsiniz :
var html = []byte(`
<html><body>Example...</body></html>
`)
// Sending it:
w.Write(html) // w is an io.Writer
Dikkat etmeniz gereken tek şey, ham dize değişmezlerinin geri tırnak karakterini (`) içeremeyeceğidir. Ham dize değişmezleri diziler içeremez (yorumlanan dize değişmez değerlerinin aksine), bu nedenle gömmek istediğiniz metin ters tırnak içeriyorsa, ham dize değişmezini kırmanız ve bu örnekte olduğu gibi geri tırnakları yorumlanmış dize değişmezleri olarak birleştirmeniz gerekir:
var html = `<p>This is a back quote followed by a dot: ` + "`" + `.</p>`
Bu birleştirmeler derleyici tarafından yürütüleceğinden performans etkilenmez.
İkili Dosyaları Gömme
Bayt dilimi olarak saklama
İkili dosyalar (ör. Görüntüler) için en kompakt (sonuçta ortaya çıkan yerel ikili ile ilgili) ve en verimli, dosyanın içeriğinin []byte
kaynak kodunuzda olduğu gibi olması olacaktır. Bu, go-bindata gibi 3. taraf araçlar / kitaplıklar tarafından oluşturulabilir .
Bunun için bir 3. taraf kitaplığı kullanmak istemiyorsanız, işte bir ikili dosyayı okuyan basit bir kod parçacığı ve dosyanın []byte
tam içeriğiyle başlatılacak bir tür değişkeni bildiren Go kaynak kodu çıktı :
imgdata, err := ioutil.ReadFile("someimage.png")
if err != nil {
panic(err)
}
fmt.Print("var imgdata = []byte{")
for i, v := range imgdata {
if i > 0 {
fmt.Print(", ")
}
fmt.Print(v)
}
fmt.Println("}")
Dosya 0'dan 16'ya kadar bayt içerecekse örnek çıktı ( Go Playground'da deneyin ):
var imgdata = []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
Base64 olarak saklama string
Dosya "çok büyük" değilse (çoğu görüntü / simge uygunsa), başka geçerli seçenekler de vardır. Dosyanın içeriğini Base64'e dönüştürebilir string
ve bunu kaynak kodunuzda saklayabilirsiniz. Uygulama başlangıcında ( func init()
) veya gerektiğinde, orijinal []byte
içeriğe dönüştürebilirsiniz. Go, encoding/base64
pakette Base64 kodlaması için güzel bir desteğe sahiptir .
Bir (ikili) dosyayı base64'e dönüştürmek string
şu kadar basittir:
data, err := ioutil.ReadFile("someimage.png")
if err != nil {
panic(err)
}
fmt.Println(base64.StdEncoding.EncodeToString(data))
Sonuç base64 dizesini kaynak kodunuzda saklayın, örneğin const
.
Kodunu çözmek sadece bir işlev çağrısıdır:
const imgBase64 = "<insert base64 string here>"
data, err := base64.StdEncoding.DecodeString(imgBase64) // data is of type []byte
Alıntılandığı gibi saklanıyor string
Base64 olarak depolamaktan daha verimli, ancak kaynak kodda daha uzun sürebilir , ikili verilerin alıntılanan dize hazır bilgisini depolamaktır . Herhangi bir dizgenin alıntılanmış biçimini strconv.Quote()
işlevi kullanarak elde edebiliriz :
data, err := ioutil.ReadFile("someimage.png")
if err != nil {
panic(err)
}
fmt.Println(strconv.Quote(string(data))
0'dan 64'e kadar değerler içeren ikili veriler için çıktı şu şekilde görünür ( Go Playground'da deneyin ):
"\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?"
( strconv.Quote()
Bir tırnak işareti eklediğini ve başına eklediğini unutmayın .)
Bu tırnak içine alınmış dizeyi kaynak kodunuzda doğrudan kullanabilirsiniz, örneğin:
const imgdata = "\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?"
Kullanıma hazırdır, kodunun çözülmesine gerek yoktur; alıntı kaldırma işlemi derleme zamanında Go derleyicisi tarafından yapılır.
İhtiyaç duymanız durumunda bir bayt dilimi olarak da saklayabilirsiniz:
var imgdata = []byte("\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?")