Intégration de fichiers dans des binaires Go
En programmation, il est courant de distribuer des fichiers exécutables qui nécessitent des ressources supplémentaires, tels que des fichiers texte. Pour simplifier le déploiement et éviter d'avoir à distribuer plusieurs fichiers, il est avantageux d'intégrer ces ressources dans le binaire lui-même.
Intégration de fichiers avec go:embed (Go 1.16 et versions ultérieures)
Avec Go 1.16, la directive go:embed fournit une méthode simple d'intégration files :
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)) }
Intégration de fichiers avec go generate (avant Go 1.16)
Pour les versions antérieures de Go, go generate propose une approche alternative :
Exemple 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") } } }
Compilation :
$ go generate $ go build -o main
Supplémentaire Remarques :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!