Maison > développement back-end > Golang > Comment puis-je intégrer des fichiers dans mes binaires Go ?

Comment puis-je intégrer des fichiers dans mes binaires Go ?

Linda Hamilton
Libérer: 2024-12-31 21:17:13
original
851 Les gens l'ont consulté

How Can I Embed Files into My Go Binaries?

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

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 :

  1. Créer un script go qui lit les fichiers texte et génère des chaînes littérales.
  2. Utiliser un commentaire go:generate dans votre fichier principal pour appeler le script.

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

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

Commandes de construction :

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

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 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal