Einbetten von Dateien in Go-Binärdateien
In der Programmierung ist es üblich, ausführbare Dateien zu verteilen, die zusätzliche Ressourcen erfordern, wie z. B. Textdateien. Um die Bereitstellung zu vereinfachen und die Verteilung mehrerer Dateien zu vermeiden, ist es vorteilhaft, diese Ressourcen in die Binärdatei selbst einzubetten.
Einbetten von Dateien mit go:embed (Go 1.16 und höher)
Mit Go 1.16 bietet die go:embed-Direktive eine unkomplizierte Methode zum Einbetten Dateien:
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)) }
Einbetten von Dateien mit go generate (vor Go 1.16)
Für frühere Versionen von Go bietet go generate einen alternativen Ansatz:
Beispiel Code:
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") } } }
Zusammenstellung:
$ go generate $ go build -o main
Zusätzlich Hinweise:
Das obige ist der detaillierte Inhalt vonWie kann ich 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!