參考鏈接:https://www.cnblogs.com/apocelipes/p/13907858.html
對於一個完整的嵌入資源,代碼中的聲明是這樣的:
//go:embed images var imgs embed.FS //go:embed a.txt var txt []byte //go:embed b.txt var txt2 string
一共有三種數據格式可選:
數據類型 | 說明 |
---|---|
[]byte | 表示數據存儲為二進制格式,如果只使用[]byte和string需要以import (_ "embed") 的形式引入embed標准庫 |
string | 表示數據被編碼成utf8編碼的字符串,因此不要用這個格式嵌入二進制文件比如圖片,引入embed的規則同[]byte |
embed.FS | 表示存儲多個文件和目錄的結構,[]byte和string只能存儲單個文件 |
實際上接受嵌入文件數據的變量也可以是string和[]byte的類型別名或基於他們定義的新類型,例如下面的代碼那樣:
type StringAlias = string //go:embed a.txt var text1 StringAlias type NewBytes []byte //go:embed b.txt var text2 NewBytes
我們先來看用[]byte
和string
嵌入單個文件的例子:
package main import ( "fmt" _ "embed" ) //go:embed macbeth.txt var macbeth string //go:embed texts/en.txt var hello string func main() { fmt.Println(len(macbeth)) // 麥克白的總字符數 fmt.Println(hello) // Output: Hello, world }
再來看看二進制文件的例子,embed_img.go如下所示:
package main import ( "fmt" _ "embed" ) //go:embed imgs/screenrecord.gif var gif []byte //go:embed imgs/png/a.png var png []byte func main() { fmt.Println("gif size:", len(gif)) // gif size: 81100466 fmt.Println("png size:", len(png)) // png size: 4958264 }