Travailler avec CSV en Go (Golang) : guide complet
CSV (Comma-Separated Values) est l'un des formats les plus courants pour l'échange de données tabulaires. En langage Go (Golang), le travail avec CSV est organisé via le package standard encoding/csv. Il fournit une interface pratique et performante pour la lecture et l'écriture de fichiers CSV, prend en charge la configuration des séparateurs, l'échappement des caractères et la gestion des erreurs.
Dans cet article, nous allons détailler toutes les fonctionnalités du package encoding/csv à l'aide d'exemples pratiques. Vous apprendrez à lire des fichiers CSV ligne par ligne et en entier, à écrire des données, à configurer les paramètres d'analyse et à gérer les erreurs typiques.
Installation et importation
Le package encoding/csv fait partie de la bibliothèque standard de Go, donc aucune installation supplémentaire n'est nécessaire. Pour l'utiliser, il suffit de l'importer dans votre code :
import ( "encoding/csv" "fmt" "os")Lecture de fichiers CSV
La façon la plus simple de lire un CSV est d'utiliser csv.NewReader et la méthode ReadAll, qui retourne tous les enregistrements sous forme d'une tranche de tranches de chaînes.
func readAllExample(filename string) { file, err := os.Open(filename) if err != nil { panic(err) } defer file.Close()
reader := csv.NewReader(file) records, err := reader.ReadAll() if err != nil { panic(err) }
for _, record := range records { fmt.Println(record) }}Pour les fichiers volumineux, il est préférable d'utiliser une lecture ligne par ligne avec la méthode Read, afin d'éviter de charger tout le fichier en mémoire :
func readLineByLine(filename string) { file, err := os.Open(filename) if err != nil { panic(err) } defer file.Close()
reader := csv.NewReader(file) reader.LazyQuotes = true // permet un parsing non strict des guillemets
for { record, err := reader.Read() if err != nil { break // fin du fichier ou erreur } fmt.Println(record) }}Écriture de fichiers CSV
Pour écrire des données, on utilise csv.NewWriter. La méthode Write écrit un enregistrement, tandis que WriteAll les écrit tous en une fois. N'oubliez pas d'appeler Flush() pour vider le tampon.
func writeExample(filename string) { file, err := os.Create(filename) if err != nil { panic(err) } defer file.Close()
writer := csv.NewWriter(file) defer writer.Flush()
data := [][]string{ {"Nom", "Âge", "Ville"}, {"Anna", "28", "Moscou"}, {"Ivan", "35", "Saint-Pétersbourg"}, }
for _, record := range data { if err := writer.Write(record); err != nil { panic(err) } }}Configuration du séparateur et de l'échappement
Par défaut, encoding/csv utilise la virgule comme séparateur et les guillemets doubles pour l'échappement. Vous pouvez modifier ces paramètres via les champs des structures Reader et Writer :
func customSettings() { // Lecture TSV (Tab-Separated Values) file, _ := os.Open("data.tsv") defer file.Close()
reader := csv.NewReader(file) reader.Comma = '\\t' // tabulation au lieu de la virgule reader.Comment = '#' // ignorer les lignes commençant par #
records, _ := reader.ReadAll() fmt.Println(records)}Champs utiles pour la configuration :
Comma— caractère séparateur (par défaut ',')Comment— caractère de commentaire (les lignes commençant par ce caractère sont ignorées)LazyQuotes— permet un parsing non strict des guillemetsTrimLeadingSpace— supprime les espaces en début de champsFieldsPerRecord— nombre attendu
Aussi dans la bibliothèque
Mise en cache en Swift (iOS/macOS) : Redis, NSCache et autres solutions
Mikro-ORM TypeScript : guide complet avec exemples
Travailler avec XML en Java : DOM, SAX, StAX et JAXB
Génération de PDF en JavaScript (Node.js) : bibliothèques et outils pour créer des PDF