Go embed package使用方法如下。
Go 1.16推出的新功能embed package可透過//go:embeded
提示(directive)將檔案內容放入變數。
範例環境:
- Go 1.17
範例
範例專案目錄結構如下。
/
├──tmp/
│ ├──a.txt
│ └──b.txt
├──go.mod
├──hello.txt
└──main.go
專案以下文藝檔內容如下。
hello.txt
Hello world
a.txt
Apple
b.txt
Banana
Embed to string
下面在根目錄的main.go
匯入embed package,然後使用//go:embed hello.txt
取得hello.txt
的內容並放入字串變數s
。注意斜線/
後不可有空白,例如// go:embed
是無效的。
main.go
package main
import (
_ "embed"
"fmt"
)
//go:embed hello.txt
var s string
func main() {
fmt.Println(s) // Hello world
}
執行印出內容如下。
Hello world
Embed to byte[]
也可把檔案內容放入[]byte
slice中。
main.go
package main
import (
_ "embed"
"fmt"
)
//go:embed tmp
var tmp embed.
func main() {
fmt.Println(string(b)) // Hello world
}
Embed to FS
除了單一檔案,也可取得檔案系統目錄及多個檔案。
下面使用go:embed tmp/*
及go:embed hello.txt
取得tmp
目錄中的檔案及hello.txt
放入型態為embed.FS
的變數f
。embed.FS
實作io/fs
package的FS
介面。
package main
import (
"embed"
"fmt"
)
//go:embed hello.txt
//go:embed tmp/*
var f embed.FS
func main() {
data, _ := f.ReadFile("hello.txt")
fmt.Println(string(data)) // Hello world
data, _ = f.ReadFile("tmp/a.txt")
fmt.Println(string(data)) // Apple
data, _ = f.ReadFile("tmp/b.txt")
fmt.Println(string(data)) // Banana
}
執行印出內容如下。
Hello world
Apple
Banana
沒有留言:
張貼留言