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 » ?

Comment puis-je intégrer des fichiers statiques dans des binaires Go à l'aide de « go:embed » et « go generate » ?

DDD
DDDoriginal
2024-12-25 10:21:17816parcourir

How Can I Embed Static Files into Go Binaries Using `go:embed` and `go generate`?

Intégration de fichiers statiques dans les binaires Go

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.

En utilisant la directive go:embed (Go 1.16)

À 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.

Utilisation de go generate

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
  • scripts/includetxt.go (intégration script)
  • a.txt
  • b.txt

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn