Comment intégrer des fichiers dans votre programme Golang

August 5, 2023

Lorsque vous développez des applications en Go, ou Golang comme on l'appelle couramment, il peut parfois être nécessaire d'embarquer des fichiers directement dans votre code binaire. Cela peut être utile pour distribuer une application autonome sans dépendances externes. Dans cet article, nous explorerons comment intégrer des fichiers dans votre programme Golang.

1. Pourquoi intégrer des fichiers?

Il y a plusieurs raisons pour lesquelles vous pourriez vouloir intégrer des fichiers dans votre application :

  • Portabilité : Votre application reste autonome sans avoir besoin de fichiers externes.
  • Facilité de déploiement : Moins de soucis concernant les fichiers manquants ou mal placés.
  • Sécurité : Moins de chances que des fichiers soient modifiés ou remplacés accidentellement.

2. L'outil //go:embed

À partir de Go 1.16, le langage a introduit une directive native //go:embed pour faciliter l'incorporation de fichiers ou de répertoires.

Exemple :

package main

import _ "embed"

//go:embed monFichier.txt
var monFichier string

func main() {
    println(monFichier)
}

Dans l'exemple ci-dessus, monFichier.txt est incorporé directement dans la variable monFichier. Lorsque le programme est exécuté, il affichera le contenu de monFichier.txt.

3. Incorporer plusieurs fichiers

Vous pouvez également incorporer plusieurs fichiers ou même un répertoire entier en utilisant la directive //go:embed.

package main

import _ "embed"
import "fmt"

//go:embed fichier1.txt fichier2.txt
var fichiers []string

func main() {
    for _, fichier := range fichiers {
        fmt.Println(fichier)
    }
}

Pour un répertoire entier :

//go:embed monDossier/*
var contenuDossier embed.FS

4. Accès aux fichiers embarqués

Avec embed.FS, vous pouvez accéder aux fichiers comme avec n'importe quel système de fichiers. Par exemple, pour lire un fichier :

data, err := contenuDossier.ReadFile("monDossier/monFichier.txt")
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(data))

5. Limitations

Bien que puissant, //go:embed a certaines limitations :

  • Vous ne pouvez pas utiliser de motifs génériques (wildcards) à l'extérieur des noms de dossiers.
  • Il n'est pas possible d'embarquer des répertoires vides.
  • Les fichiers .go ne sont pas autorisés à être embarqués.

Conclusion

L'introduction de //go:embed dans Golang a simplifié le processus d'incorporation de fichiers et de répertoires, offrant une portabilité et une sécurité accrues. Avec cette fonctionnalité, vos déploiements peuvent être plus fluides, et vos applications plus robustes. Commencez dès aujourd'hui à l'explorer et à l'intégrer dans vos projets Golang!

Read also

Comment créer un fichier de service systemd sous Linux
Comments
Tags