將檔案嵌入到Go 二進位檔案中
在程式設計中,散佈需要額外資源的可執行檔(例如文字檔案)是很常見的。為了簡化部署並避免分發多個文件,將這些資源嵌入到二進位檔案本身是有益的。
使用go:embed 嵌入檔案(Go 1.16 及更高版本)
在Go 1.16 中,go:embed 指令提供了一個簡單的嵌入方法files :
package main import "embed" // Embed the "hello.txt" file as a string //go:embed hello.txt var s string // Embed the "hello.txt" file as a byte slice //go:embed hello.txt var b []byte // Embed the "hello.txt" file as an embed.FS object //go:embed hello.txt var f embed.FS func main() { // Read the file contents as a string data, _ := f.ReadFile("hello.txt") println(string(data)) }
使用gogenerate嵌入檔案(Go 1.16 之前)
對於早期版本的Go,gogenerate 提供了另一種方法:
範例程式碼:
main.go
package main import "fmt" //go:generate go run scripts/includetxt.go func main() { fmt.Println(a) fmt.Println(b) }
package main import ( "io" "io/ioutil" "os" "strings" ) // Embed all .txt files as string literals func main() { fs, _ := ioutil.ReadDir(".") out, _ := os.Create("textfiles.go") for _, f := range fs { if strings.HasSuffix(f.Name(), ".txt") { out.WriteString(strings.TrimSuffix(f.Name(), ".txt") + " = `") f, _ := os.Open(f.Name()) io.Copy(out, f) out.WriteString("`\n") } } }
編譯:
$ go generate $ go build -o main
額外注意:
以上是如何使用「go:embed」和「gogenerate」將檔案嵌入 Go 二進位檔案中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!