Heim >Backend-Entwicklung >Golang >Wie kann ich statische Dateien mit „go:embed' und „go generic' in Go-Binärdateien einbetten?

Wie kann ich statische Dateien mit „go:embed' und „go generic' in Go-Binärdateien einbetten?

DDD
DDDOriginal
2024-12-25 10:21:17808Durchsuche

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

Einbetten statischer Dateien in Go-Binärdateien

Das Einbetten statischer Dateien in Go-Binärdateien stellt sicher, dass alle erforderlichen Dateien in der ausführbaren Datei gebündelt sind, sodass keine externe Dateiverwaltung erforderlich ist. Dies kann durch die go:embed-Direktive oder die go-Generate-Technik erreicht werden.

Verwendung der go:embed-Direktive (Go 1.16)

Ab Go 1.16 kann die go:embed-Direktive verwendet werden um Dateien direkt in die Binärdatei einzubetten:

//go:embed hello.txt
var s string

Dadurch wird der Inhalt von hello.txt in die String-Variable eingebettet s.

Mit go generic

Für ältere Versionen von Go können Sie Dateien mit go generic in Verbindung mit einem Skript einbetten. Hier ist ein Beispiel:

Dateistruktur:

  • main.go
  • scripts/includetxt.go (Einbettung Skript)
  • a.txt
  • b.txt

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

Zum Einbetten die Dateien:

$ go generate
$ go build -o main

textfiles.go (Generiert):

package main 

const (
a = `hello`
b = `world`
)

Dadurch werden die Inhalte von a.txt und b.txt in die Binärdatei as eingebettet String-Konstanten, sodass in main.go jeweils als a und b auf sie zugegriffen werden kann.

Das obige ist der detaillierte Inhalt vonWie kann ich statische Dateien mit „go:embed' und „go generic' in 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