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.
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.
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:
//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!