Maison >développement back-end >Golang >Comment puis-je intégrer des fichiers statiques dans des binaires Go à l'aide de « go:embed » et « go generate » ?
L'intégration de fichiers statiques dans les binaires Go garantit que tous les fichiers nécessaires sont regroupés dans l'exécutable, éliminant ainsi le besoin de gestion externe des fichiers. Ceci peut être réalisé via la directive go:embed ou la technique go generate.
À partir de Go 1.16, la directive go:embed peut être utilisée pour intégrer des fichiers directement dans le binaire :
//go:embed hello.txt var s string
Cela intègre le contenu de hello.txt dans la variable de chaîne s.
Pour les anciennes versions de Go, vous pouvez intégrer des fichiers en utilisant go generate en conjonction avec un script. Voici un exemple :
Structure du fichier :
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")) }
Pour intégrer le files :
$ go generate $ go build -o main
textfiles.go (généré) :
package main const ( a = `hello` b = `world` )
Ceci intègre le contenu de a.txt et b.txt dans le binaire sous forme de chaîne constantes, permettant d'y accéder dans main.go en tant que a et b, respectivement.
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!