ホームページ > バックエンド開発 > Golang > ファイルを Go バイナリに埋め込むにはどうすればよいですか?

ファイルを Go バイナリに埋め込むにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-31 21:17:13
オリジナル
833 人が閲覧しました

How Can I Embed Files into My Go Binaries?

Go バイナリへのファイルの組み込み

必要なテキスト ファイルを含む単一の実行可能ファイルを配布したいですか? Go は、さまざまなプラットフォームに合わせてバイナリにファイルを埋め込むためのソリューションを提供します。

Go 1.16 以降: go:embed ディレクティブ

Go バージョン 1.16 以降では、 go:embed ディレクティブ。ファイルを埋め込むためのエレガントな方法を提供します:

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 以降: 柔軟性のために go generated

Go バージョン 1.4 以降では、次の方法に頼ることができます。柔軟性を高めるために生成してください。このアプローチには以下が含まれます:

  1. テキスト ファイルを読み取り文字列リテラルを生成する go スクリプトを作成します。
  2. メイン ファイルで go:generate コメントを使用してスクリプトを呼び出します。

この手法により、最小限のハードコーディングで複数のテキスト ファイルを埋め込むことができます。例:

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート