पाठ फ़ाइलों को एम्बेड करना
यदि हम पाठ फ़ाइलों के बारे में बात कर रहे हैं, तो वे आसानी से स्रोत कोड में ही एम्बेड किए जा सकते हैं। string
इस तरह शाब्दिक घोषित करने के लिए बस पीछे के उद्धरणों का उपयोग करें:
const html = `
<html>
<body>Example embedded HTML content.</body>
</html>
`
// Sending it:
w.Write([]byte(html)) // w is an io.Writer
अनुकूलन टिप:
चूंकि अधिकांश समय आपको केवल संसाधन को लिखने की आवश्यकता होगी io.Writer
, इसलिए आप []byte
रूपांतरण का परिणाम भी संग्रहीत कर सकते हैं :
var html = []byte(`
<html><body>Example...</body></html>
`)
// Sending it:
w.Write(html) // w is an io.Writer
केवल एक चीज जिसके बारे में आपको सावधान रहना है, वह यह है कि कच्चे स्ट्रिंग शाब्दिकों में पीछे की बोली वर्ण (`) नहीं हो सकती है। कच्चे स्ट्रिंग शाब्दिकों में अनुक्रमणिका (व्याख्या की गई स्ट्रिंग शाब्दिक के विपरीत) नहीं हो सकती है, इसलिए यदि आप जिस पाठ को एम्बेड करना चाहते हैं, उसमें वापस उद्धरण शामिल हैं, तो आपको कच्चे स्ट्रिंग शाब्दिक और संक्षिप्त उद्धरणों को व्याख्यायित स्ट्रिंग शाब्दिकों के रूप में तोड़ना होगा, जैसे कि इस उदाहरण में:
var html = `<p>This is a back quote followed by a dot: ` + "`" + `.</p>`
प्रदर्शन प्रभावित नहीं होता है, क्योंकि इन संघनन को संकलक द्वारा निष्पादित किया जाएगा।
बाइनरी फाइलें एम्बेड करना
बाइट स्लाइस के रूप में भंडारण
बाइनरी फ़ाइलों (उदाहरण के लिए चित्र) के लिए सबसे कॉम्पैक्ट (परिणामी मूल बाइनरी के बारे में) और सबसे अधिक कुशल []byte
आपके स्रोत कोड में फ़ाइल की सामग्री होना चाहिए । इसे गो-बिंदता जैसे 3 पार्टी टोसे / लाइब्रेरी द्वारा उत्पन्न किया जा सकता है ।
यदि आप इसके लिए एक 3 पार्टी लाइब्रेरी का उपयोग नहीं करना चाहते हैं, तो यहां एक सरल कोड स्निपेट है जो एक बाइनरी फ़ाइल को पढ़ता है, और गो स्रोत कोड को आउटपुट करता है जो कि एक प्रकार का चर घोषित करता है []byte
जिसे फ़ाइल की सटीक सामग्री के साथ आरंभ किया जाएगा:
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("}")
उदाहरण आउटपुट यदि फ़ाइल में 0 से 16 तक बाइट्स होंगे (इसे Go Playground पर आज़माएँ ):
var imgdata = []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
आधार के रूप में भंडारण string
यदि फ़ाइल "बहुत बड़ी" नहीं है (अधिकांश चित्र / आइकन योग्य हैं), तो अन्य व्यवहार्य विकल्प भी हैं। आप फ़ाइल की सामग्री को बेस 64 में रूपांतरित कर सकते हैं string
और अपने स्रोत कोड में संग्रहीत कर सकते हैं। एप्लिकेशन स्टार्टअप पर ( func init()
) या जब आवश्यक हो, आप इसे मूल []byte
सामग्री को डिकोड कर सकते हैं । encoding/base64
पैकेज में बेस 64 एनकोडिंग के लिए गो का अच्छा समर्थन है ।
एक (बाइनरी) फ़ाइल को बेस 64 string
में परिवर्तित करना उतना ही सरल है:
data, err := ioutil.ReadFile("someimage.png")
if err != nil {
panic(err)
}
fmt.Println(base64.StdEncoding.EncodeToString(data))
अपने स्रोत कोड में परिणाम बेस 64 स्ट्रिंग को स्टोर करें, जैसे कि ए const
।
डिकोड करना यह केवल एक फ़ंक्शन कॉल है:
const imgBase64 = "<insert base64 string here>"
data, err := base64.StdEncoding.DecodeString(imgBase64) // data is of type []byte
उद्धृत के रूप में भंडारण string
बेस 64 के रूप में संग्रहीत करने की तुलना में अधिक कुशल, लेकिन स्रोत कोड में लंबे समय तक हो सकता है बाइनरी डेटा के उद्धृत स्ट्रिंग शाब्दिक संग्रहित कर रहा है । हम strconv.Quote()
फ़ंक्शन का उपयोग करके किसी भी स्ट्रिंग के उद्धृत रूप को प्राप्त कर सकते हैं :
data, err := ioutil.ReadFile("someimage.png")
if err != nil {
panic(err)
}
fmt.Println(strconv.Quote(string(data))
0 से 64 तक के बाइनरी डेटा के लिए यह है कि आउटपुट कैसा लगेगा (इसे गो प्लेग्राउंड पर आज़माएं ):
"\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()
इसके लिए एक उद्धरण चिह्न संलग्न और प्रस्तुत करता है।)
आप सीधे अपने स्रोत कोड में इस उद्धृत स्ट्रिंग का उपयोग कर सकते हैं, उदाहरण के लिए:
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:;<=>?"
यह उपयोग करने के लिए तैयार है, इसे डिकोड करने की आवश्यकता नहीं है; संकलन समय पर, गो संकलक द्वारा किया जाता है।
आप इसे बाइट स्लाइस के रूप में भी स्टोर कर सकते हैं, आपको इसकी आवश्यकता इस तरह होनी चाहिए:
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:;<=>?")