การฝังไฟล์ข้อความ
หากเรากำลังพูดถึงไฟล์ข้อความสามารถฝังลงในซอร์สโค้ดได้อย่างง่ายดาย เพียงใช้เครื่องหมายคำพูดหลังเพื่อประกาศstring
ตัวอักษรดังนี้:
const html = `
<html>
<body>Example embedded HTML content.</body>
</html>
`
w.Write([]byte(html))
เคล็ดลับการเพิ่มประสิทธิภาพ:
เนื่องจากส่วนใหญ่คุณจะต้องเขียนทรัพยากรลงใน a 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
ในซอร์สโค้ดของคุณ นี้สามารถสร้างขึ้นโดยบุคคลที่ 3 toos / ห้องสมุดเช่นไป bindata
หากคุณไม่ต้องการใช้ไลบรารีของบุคคลที่สามสำหรับสิ่งนี้ต่อไปนี้เป็นข้อมูลโค้ดง่ายๆที่อ่านไฟล์ไบนารีและส่งออกซอร์สโค้ด Go ที่ประกาศตัวแปรประเภท[]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}
จัดเก็บเป็นฐาน 64 string
หากไฟล์ไม่ "ใหญ่เกินไป" (รูปภาพ / ไอคอนส่วนใหญ่มีคุณสมบัติเหมาะสม) ก็มีตัวเลือกอื่น ๆ ที่ใช้งานได้เช่นกัน คุณสามารถแปลงเนื้อหาของไฟล์เป็น Base64 string
และเก็บไว้ในซอร์สโค้ดของคุณ ในการเริ่มต้นแอปพลิเคชัน ( func init()
) หรือเมื่อจำเป็นคุณสามารถถอดรหัสเป็น[]byte
เนื้อหาต้นฉบับได้ Go มีการสนับสนุนที่ดีสำหรับการเข้ารหัส Base64 ในencoding/base64
แพ็คเกจ
การแปลงไฟล์ (ไบนารี) เป็น base64 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
มีประสิทธิภาพมากขึ้นกว่าการจัดเก็บเป็น base64 แต่อาจจะนานในรหัสที่มาอยู่ในการจัดเก็บยกอักษรสตริงของข้อมูลไบนารี เราสามารถรับรูปแบบที่ยกมาของสตริงใด ๆ โดยใช้strconv.Quote()
ฟังก์ชัน:
data, err := ioutil.ReadFile("someimage.png")
if err != nil {
panic(err)
}
fmt.Println(strconv.Quote(string(data))
สำหรับข้อมูลไบนารีที่มีค่าตั้งแต่ 0 ถึง 64 นี่คือลักษณะของผลลัพธ์ (ลองใช้บนGo Playground ):
"\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:;<=>?"
พร้อมใช้งานไม่จำเป็นต้องถอดรหัส การยกเลิกการอ้างสิทธิ์จะกระทำโดยคอมไพเลอร์ Go ในเวลาคอมไพล์
คุณสามารถจัดเก็บเป็นชิ้นส่วนไบต์ได้หากคุณต้องการเช่นนั้น:
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:;<=>?")