Incorporation de fichiers dans les binaires Go
Vous souhaitez distribuer un seul exécutable comprenant les fichiers texte nécessaires ? Go fournit des solutions d'intégration de fichiers dans des binaires, adaptées à diverses plates-formes.
Go 1.16 et au-delà : directive go:embed
Pour les versions Go 1.16 et supérieures, tirez parti de la aller: directive d'intégration. Il offre une manière élégante d'intégrer des fichiers :
import "embed" //go:embed hello.txt var s string print(s) //go:embed hello.txt var b []byte print(string(b)) //go:embed hello.txt var f embed.FS data, _ := f.ReadFile("hello.txt") print(string(data))
Go 1.4 et versions ultérieures : allez générer pour la flexibilité
Pour les versions Go 1.4 et ultérieures, vous pouvez recourir à allez générer pour une plus grande flexibilité. Cette approche implique :
Cette technique permet d'intégrer plusieurs fichiers texte avec un minimum de codage en dur. Par exemple :
main.go
package main import "fmt" //go:generate go run scripts/includetxt.go func main() { fmt.Println(a) fmt.Println(b) }
script/includetxt.go
package main import ( "io" "io/ioutil" "os" "strings" ) func main() { fs, _ := ioutil.ReadDir(".") out, _ := os.Create("textfiles.go") out.Write([]byte("package main \n\nconst (\n")) for _, f := range fs { if strings.HasSuffix(f.Name(), ".txt") { out.Write([]byte(strings.TrimSuffix(f.Name(), ".txt") + " = `")) f, _ := os.Open(f.Name()) io.Copy(out, f) out.Write([]byte("`\n")) } } out.Write([]byte(")\n")) }
Commandes de construction :
$ go generate $ go build -o main
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!