Maison >développement back-end >Golang >Comment puis-je intégrer des fichiers dans mes binaires Go en utilisant « go:embed » et « go generate » ?

Comment puis-je intégrer des fichiers dans mes binaires Go en utilisant « go:embed » et « go generate » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-17 10:13:25482parcourir

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

Intégration de fichiers dans des binaires Go

Dans Go, vous pouvez rencontrer des scénarios dans lesquels vous souhaitez inclure des fichiers dans l'exécutable compilé plutôt que de les distribuer séparément. Ce guide explore deux méthodes pour intégrer des fichiers dans vos binaires Go : en utilisant la directive go:embed et la commande go generate.

Intégration de fichiers avec go:embed

Introduit dans Go 1.16, le go : La directive embed fournit un moyen simple d'intégrer des fichiers dans vos binaires. Cette directive vous permet de définir directement une variable qui contient le fichier incorporé sous forme de chaîne, de tranche d'octets ou de type embed.FS. Par exemple :

import "embed"

//go:embed hello.txt
var s string

L'utilisation de go:embed rationalise le processus d'intégration de fichiers, en particulier lorsqu'il s'agit de fichiers multiples ou générés dynamiquement.

Intégration de fichiers avec go generate

Avant Go 1.16, la commande go generate offrait une méthode alternative pour intégrer des fichiers. Cette méthode implique la création d'un script personnalisé qui lit les fichiers et génère un fichier Go contenant les fichiers intégrés sous forme de chaînes littérales.

  1. Créez un script pour générer le fichier Go :
    Dans un fichier de script séparé, lisez les fichiers texte et écrivez-les sous forme de chaîne littérale dans un nouveau fichier. Par exemple :

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "os"
        "strings"
    )
    
    // Reads all .txt files in the current folder
    // and encodes them as string literals in textfiles.go
    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"))
    }
  2. Ajoutez un commentaire spécial à votre fichier Go principal :
    Ajoutez un commentaire spécial contenant la commande go generate dans votre fichier Go principal déposer. Ce commentaire indique à Go d'exécuter le script spécifié avant de compiler.

    //go:generate go run scripts/includetxt.go
  3. Compilez votre programme :
    Exécutez go generate pour exécuter le script et générer les fichiers texte.go fichier, contenant les fichiers incorporés sous forme de chaînes littérales. Ensuite, construisez votre programme à l'aide de go build.

Bien que go generate offre plus de flexibilité, go:embed est une approche plus moderne et plus pratique pour intégrer des fichiers dans des binaires Go. Choisissez la méthode qui correspond le mieux à vos besoins de développement.

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