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
Libérer: 2024-12-25 10:21:17
original
808 Les gens l'ont consulté

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
Copier après la connexion

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)
}
Copier après la connexion

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"))
}
Copier après la connexion

Pour intégrer le files :

$ go generate
$ go build -o main
Copier après la connexion

textfiles.go (généré) :

package main 

const (
a = `hello`
b = `world`
)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal