golang1.16內嵌靜態資源指南-go:embed 新特性


參考鏈接: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

我們先來看用[]bytestring嵌入單個文件的例子:

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
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM