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)) }
go generated によるファイルの埋め込み (Go 1.16 より前)
Go の以前のバージョンの場合、go generated は代替アプローチを提供します:
例コード:
main.go
package main import "fmt" //go:generate go run scripts/includetxt.go func main() { fmt.Println(a) fmt.Println(b) }
scripts/includetxt.go
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 中国語 Web サイトの他の関連記事を参照してください。