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
833 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!

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