Travailler avec le système de fichiers en Go : des bases aux techniques avancées
Go (Golang) est un langage de programmation moderne réputé pour sa simplicité et ses hautes performances. L'une des tâches clés auxquelles tout développeur est confronté est la manipulation du système de fichiers. Dans cet article, nous allons détailler comment créer, lire, écrire des fichiers, gérer des répertoires et traiter des chemins en Go. Vous obtiendrez des exemples de code pratiques qui vous aideront à maîtriser la manipulation des fichiers rapidement et efficacement.
Paquets principaux pour travailler avec le système de fichiers
En Go, le travail avec le système de fichiers est concentré dans trois paquets principaux de la bibliothèque standard :
os— opérations de base : ouverture, création, suppression de fichiers et de répertoires.ioetio/ioutil— lecture et écriture de données (dans les nouvelles versions de Go, il est recommandé d'utiliserosau lieu deioutil).path/filepath— manipulation des chemins : concaténation, décomposition, obtention des extensions.
Avant de commencer, assurez-vous d'avoir importé les paquets nécessaires :
package main
import ( "fmt" "os" "io" "path/filepath")Lecture et écriture de fichiers en Go
Lecture complète d'un fichier
La façon la plus simple de lire un fichier est d'utiliser la fonction os.ReadFile (disponible depuis Go 1.16). Elle retourne une tranche d'octets et une erreur.
func readFileExample() { data, err := os.ReadFile("example.txt") if err != nil { fmt.Println("Erreur de lecture du fichier :", err) return } fmt.Println(string(data))}Écriture dans un fichier
Pour écrire des données dans un fichier, utilisez os.WriteFile. Si le fichier n'existe pas, il sera créé. S'il existe, il sera écrasé.
func writeFileExample() { content := []byte("Bonjour le monde !Deuxième ligne.") err := os.WriteFile("output.txt", content, 0644) if err != nil { fmt.Println("Erreur d'écriture :", err) return } fmt.Println("Fichier écrit avec succès")}Lecture ligne par ligne des gros fichiers
Pour traiter de gros fichiers, il est préférable d'utiliser une lecture bufferisée afin de ne pas charger tout le fichier en mémoire.
import "bufio"
func readLineByLine() { file, err := os.Open("large_file.txt") if err != nil { fmt.Println("Erreur d'ouverture :", err) return } defer file.Close()
scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() fmt.Println(line) } if err := scanner.Err(); err != nil { fmt.Println("Erreur de scan :", err) }}Travailler avec les répertoires en Go
Création et suppression de répertoires
Pour créer un seul répertoire, utilisez os.Mkdir, pour des répertoires imbriqués, utilisez os.MkdirAll.
func createDirectories() { // Créer un seul dossier err := os.Mkdir("mydir", 0755) if err != nil { fmt.Println("Erreur de création du dossier :", err) }
// Créer une structure imbriquée err = os.MkdirAll("path/to/nested/dir", 0755) if err != nil { fmt.Println("Erreur de création des dossiers imbriqués :", err) }}La suppression de répertoires se fait avec les fonctions os.Remove (pour les vides) et os.RemoveAll (pour les non vides).
func removeDirectories() { // Supprimer un dossier vide err := os.Remove("mydir") if err != nil { fmt.Println("Erreur de suppression :", err) }
// Supprimer un dossier avec tout son contenu err = os.RemoveAll("path/to") if err != nil { fmt.Println("Erreur de suppression récursive :", err) }}Lecture du contenu d'un répertoire
La fonction os.ReadDir retourne une liste des éléments dans un répertoire.
Blogs
Book Recommendations
Lire aussi
Conversion sécurisée des nombres en Rust : guide complet pour débutants
Programmation asynchrone en Java : guide complet pour débutants
CI/CD pour projets PHP : GitHub Actions niveau avancé
Code Review en Swift : 10 choses que je vérifie en premier
Réusinage du code legacy en PHP : guide étape par étape