将文件合并到 Go 二进制文件
想要分发包含必要文本文件的单个可执行文件? Go 提供了针对各种平台定制的将文件嵌入二进制文件的解决方案。
Go 1.16 及更高版本:go:embed 指令
对于 Go 版本 1.16 及更高版本,利用去:嵌入指令。它提供了一种优雅的嵌入文件的方式:
import "embed" //go:embed hello.txt var s string print(s) //go:embed hello.txt var b []byte print(string(b)) //go:embed hello.txt var f embed.FS data, _ := f.ReadFile("hello.txt") print(string(data))
Go 1.4 及更高版本:gogenerate 以获得灵活性
对于 Go 版本 1.4 及更高版本,您可以求助于去生成以获得更大的灵活性。此方法涉及:
此技术可以使用最少的硬编码嵌入多个文本文件。例如:
main.go
package main import "fmt" //go:generate go run scripts/includetxt.go func main() { fmt.Println(a) fmt.Println(b) }
script/includetxt.go
package main import ( "io" "io/ioutil" "os" "strings" ) func main() { fs, _ := ioutil.ReadDir(".") out, _ := os.Create("textfiles.go") out.Write([]byte("package main \n\nconst (\n")) for _, f := range fs { if strings.HasSuffix(f.Name(), ".txt") { out.Write([]byte(strings.TrimSuffix(f.Name(), ".txt") + " = `")) f, _ := os.Open(f.Name()) io.Copy(out, f) out.Write([]byte("`\n")) } } out.Write([]byte(")\n")) }
构建命令:
$ go generate $ go build -o main
以上是如何将文件嵌入到我的 Go 二进制文件中?的详细内容。更多信息请关注PHP中文网其他相关文章!