將靜態檔案嵌入Go 二進位檔案中可確保所有必要的檔案都捆綁在可執行檔案中,從而無需進行外部文件管理。這可以透過 go:embed 指令或 go generated 技術來實現。
從Go 1.16 開始,可以使用go:embed 指令將檔案直接嵌入到二進位檔案中:
//go:embed hello.txt var s string
這會嵌入以下內容hello.txt 到字串變數s 中。
對於舊版的 Go,您可以使用 gogenerate 結合腳本來嵌入檔案。這是一個範例:
檔案結構:
main.txt去:
//go:generate go run scripts/includetxt.go package main import "fmt" func main() { fmt.Println(a) fmt.Println(b) }
includetxt.go:
package main import ( "io/ioutil" "os" "strings" ) func main() { // Create the output file out, _ := os.Create("textfiles.go") out.Write([]byte("package main \n\nconst (\n")) // Iterate over .txt files in the current directory fs, _ := ioutil.ReadDir(".") for _, f := range fs { if strings.HasSuffix(f.Name(), ".txt") { // Write the embedded file contents to the output file out.Write([]byte(strings.TrimSuffix(f.Name(), ".txt") + ` = "`)) f, _ := os.Open(f.Name()) io.Copy(out, f) out.Write([]byte("`\n")) } } // Close the output file out.Write([]byte(")\n")) }
到嵌入檔案:
$ go generate $ go build -o main
textfiles.go(產生):
package main const ( a = `hello` b = `world` )
這會將a.txt 和 b.txt 的內容嵌入到二進位檔案中作為字串常數,允許它們在 main.go 中分別以 a 和 b 存取。
以上是如何使用「go:embed」和「gogenerate」將靜態檔案嵌入 Go 二進位檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!