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
Freigeben: 2024-12-25 10:21:17
Original
805 Leute haben es durchsucht

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
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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"))
}
Nach dem Login kopieren

Zum Einbetten die Dateien:

$ go generate
$ go build -o main
Nach dem Login kopieren

textfiles.go (Generiert):

package main 

const (
a = `hello`
b = `world`
)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage