Heim >Backend-Entwicklung >Golang >Wie kann ich Dateien in meine Go-Binärdateien einbetten?

Wie kann ich Dateien in meine Go-Binärdateien einbetten?

Linda Hamilton
Linda HamiltonOriginal
2024-12-31 21:17:13819Durchsuche

How Can I Embed Files into My Go Binaries?

Dateien in Go-Binärdateien integrieren

Möchten Sie eine einzelne ausführbare Datei verteilen, die die erforderlichen Textdateien enthält? Go bietet Lösungen zum Einbetten von Dateien in Binärdateien, die auf verschiedene Plattformen zugeschnitten sind.

Go 1.16 und höher: go:embed-Direktive

Für Go-Versionen 1.16 und höher nutzen Sie die go:embed-Direktive. Es bietet eine elegante Möglichkeit, Dateien einzubetten:

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 und höher: Go-Generieren für Flexibilität

Für Go-Versionen 1.4 und höher können Sie darauf zurückgreifen go generieren für mehr Flexibilität. Dieser Ansatz umfasst:

  1. Erstellen eines Go-Skripts, das Textdateien liest und Zeichenfolgenliterale generiert.
  2. Verwenden eines go:generate-Kommentars in Ihrer Hauptdatei, um das Skript aufzurufen.

Diese Technik ermöglicht das Einbetten mehrerer Textdateien mit minimaler Hardcodierung. Zum Beispiel:

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"))
}

Build-Befehle:

$ go generate
$ go build -o main

Das obige ist der detaillierte Inhalt vonWie kann ich Dateien in meine Go-Binärdateien einbetten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn