এম্বেড করা পাঠ্য ফাইল
যদি আমরা পাঠ্য ফাইলগুলির বিষয়ে কথা বলি তবে সেগুলি সহজেই সোর্স কোডে এম্বেড করা যায়। string
আক্ষরিক ঘোষণার জন্য কেবল পিছনের উদ্ধৃতিগুলি ব্যবহার করুন :
const html = `
<html>
<body>Example embedded HTML content.</body>
</html>
`
w.Write([]byte(html))
অপ্টিমাইজেশন টিপ:
যেহেতু বেশিরভাগ সময় আপনাকে কেবল একটিতে সংস্থান লিখতে হবে io.Writer
, আপনি কোনও []byte
রূপান্তরের ফলাফলও সংরক্ষণ করতে পারেন :
var html = []byte(`
<html><body>Example...</body></html>
`)
w.Write(html)
কেবলমাত্র আপনাকে যে বিষয় সম্পর্কে যত্নবান হতে হবে তা হ'ল কাঁচা স্ট্রিং লিটারেলগুলিতে ব্যাক কোট অক্ষর (`) থাকতে পারে না। কাঁচা স্ট্রিং লিটারেলগুলিতে সিক্যুয়েন্স থাকতে পারে না (ব্যাখ্যা করা স্ট্রিং লিটারালগুলির বিপরীতে), সুতরাং আপনি যে পাঠ্যটি এম্বেড করতে চান তা যদি পিছনের উদ্ধৃতিগুলিতে থাকে তবে আপনাকে কাঁচা স্ট্রিং আক্ষরিক ভাঙতে হবে এবং ব্যাক স্ট্রিটকে ব্যাখ্যামূলক স্ট্রিং লিটারাল হিসাবে চিহ্নিত করতে হবে, যেমন এই উদাহরণটির মতো:
var html = `<p>This is a back quote followed by a dot: ` + "`" + `.</p>`
পারফরম্যান্স প্রভাবিত হয় না, কারণ এই সংক্ষেপণগুলি সংকলক দ্বারা কার্যকর করা হবে।
বাইনারি ফাইল এম্বেড করা হচ্ছে
বাইট স্লাইস হিসাবে সংরক্ষণ করা
বাইনারি ফাইলগুলির জন্য (যেমন চিত্রগুলি) সর্বাধিক কমপ্যাক্ট (ফলস্বরূপ নেটিভ বাইনারি সম্পর্কিত) এবং সর্বাধিক দক্ষ হ'ল []byte
আপনার সোর্স কোডে ফাইলটির সামগ্রী থাকতে পারে । এটি গো-বিনতার মতো তৃতীয় পক্ষের টূস / লাইব্রেরি দ্বারা উত্পাদিত হতে পারে ।
আপনি যদি এর জন্য কোনও তৃতীয় পক্ষের লাইব্রেরিটি ব্যবহার করতে না চান, তবে এখানে একটি সাধারণ কোড স্নিপেট রয়েছে যা বাইনারি ফাইল পড়ে এবং আউটপুট গো সোর্স কোড দেয় যা বিভিন্ন ধরণের ভেরিয়েবল ঘোষণা করে []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 পর্যন্ত বাইট থাকে (এটি খেলার খেলার মাঠে চেষ্টা করুন ):
var imgdata = []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
বেস 64 হিসাবে সংরক্ষণ করা হচ্ছে 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))
আপনার উৎস কোডের, যেমন একটি হিসাবে ফলাফলের করুন Base64- স্ট্রিং সঞ্চয় করুন const
।
এটিকে ডিকোডিং করা কেবল একটি ফাংশন কল:
const imgBase64 = "<insert base64 string here>"
data, err := base64.StdEncoding.DecodeString(imgBase64)
উদ্ধৃত হিসাবে সংরক্ষণ করা 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:;<=>?"
এটি ব্যবহারের জন্য প্রস্তুত, এটি ডিকোড করার প্রয়োজন নেই; আনকোটিংটি সংকলনের সময় গো সংকলক দ্বারা সম্পন্ন হয়।
আপনি এটি বাইট স্লাইস হিসাবে এটির মতো আপনার প্রয়োজন হওয়া উচিত need
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:;<=>?")