ホームページ > バックエンド開発 > Golang > 「go:embed」と「gogenerate」を使用して Go バイナリにファイルを埋め込むにはどうすればよいですか?

「go:embed」と「gogenerate」を使用して Go バイナリにファイルを埋め込むにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-17 10:13:25
オリジナル
442 人が閲覧しました

How Can I Embed Files into My Go Binaries Using `go:embed` and `go generate`?

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

Go では、ファイルを個別に配布するのではなく、コンパイルされた実行可能ファイル内に含めたいシナリオに遭遇することがあります。このガイドでは、Go バイナリにファイルを埋め込むための 2 つの方法、go:embed ディレクティブと go generated コマンドを使用する方法について説明します。

go:embed によるファイルの埋め込み

Go 1.16 で導入された go: embed ディレクティブは、ファイルをバイナリに埋め込む簡単な方法を提供します。このディレクティブを使用すると、埋め込みファイルを文字列、バイト スライス、または embed.FS タイプとして保持する変数を直接定義できます。例:

import "embed"

//go:embed hello.txt
var s string
ログイン後にコピー

go:embed を使用すると、特に複数のファイルや動的に生成されたファイルを扱う場合に、ファイルの埋め込みプロセスが合理化されます。

go generated によるファイルの埋め込み

Go 1.16 より前では、 go generated コマンドはファイルを埋め込むための代替方法を提供していました。この方法には、ファイルを読み取り、埋め込みファイルを文字列リテラルとして含む Go ファイルを生成するカスタム スクリプトの作成が含まれます。

  1. Go ファイルを生成するスクリプトを作成します:
    別のスクリプト ファイルで、テキスト ファイルを読み取り、文字列リテラルとして新しいファイルに書き込みます。例:

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "os"
        "strings"
    )
    
    // Reads all .txt files in the current folder
    // and encodes them as string literals in textfiles.go
    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"))
    }
    ログイン後にコピー
  2. メイン Go ファイルに特別なコメントを追加します。
    メイン Go に go generated コマンドを含む特別なコメントを追加します。ファイル。このコメントは、コンパイル前に指定されたスクリプトを実行するように Go に指示します。

    //go:generate go run scripts/includetxt.go
    ログイン後にコピー
  3. プログラムをコンパイルします:
    gogenerate を実行してスクリプトを実行し、textfiles.go を生成します。ファイル。埋め込みファイルが文字列リテラルとして含まれます。次に、go build を使用してプログラムをビルドします。

go Generate は柔軟性が高く、go:embed は Go バイナリにファイルを埋め込むためのより現代的で便利なアプローチです。開発ニーズに最も適した方法を選択してください。

以上が「go:embed」と「gogenerate」を使用して Go バイナリにファイルを埋め込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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