Go バイナリに静的ファイルを埋め込むと、必要なファイルがすべて実行可能ファイル内にバンドルされるため、外部ファイル管理の必要がなくなります。これは、 go:embed ディレクティブまたは go generated 手法を通じて実現できます。
Go 1.16 以降では、 go:embed ディレクティブを使用できます。ファイルをバイナリに直接埋め込む場合:
//go:embed hello.txt var s string
これはコンテンツを埋め込みます
Go の古いバージョンの場合は、スクリプトと組み合わせて go generated を使用してファイルを埋め込むことができます。以下に例を示します:
ファイル構造:
メイン。 go:
//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 中国語 Web サイトの他の関連記事を参照してください。