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

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

Susan Sarandon
リリース: 2024-12-18 02:32:10
オリジナル
367 人が閲覧しました

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

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 は代替アプローチを提供します:

  1. includetxt.go スクリプトを作成します: このスクリプトテキスト ファイルを読み取り、文字列リテラルを生成します。
  2. go:generate コメントを main.go: に追加します。コメントは includetxt.go スクリプトの実行をトリガーし、文字列リテラル。
  3. 例コード:

    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")
            }
        }
    }
    ログイン後にコピー
  4. コンパイル:

    $ go generate
    $ go build -o main
    ログイン後にコピー

追加注:

  • go generated アプローチでは、テキスト ファイルが UTF-8 でエンコードされている必要があります。
  • 非 UTF-8 ファイルの場合は、 includetxt.go script.
  • go:embed の embed.FS タイプは、仮想ファイルを使用して埋め込みファイルへのアクセスを提供しますシステム。

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

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