← Tous les articles

Pourquoi j'ai réécrit mon projet en Go

Après des mois de maintenance d'un outil CLI en Node.js, j'ai décidé de le réécrire en Go. Voici pourquoi cette décision avait du sens et ce que j'ai appris en cours de route.

Le problème avec Node.js pour les outils CLI

Ne vous méprenez pas — Node.js est fantastique pour beaucoup de choses. Mais pour les outils CLI qui doivent être distribués comme des binaires autonomes, il présente certains défis :

  • Complexité de distribution : Les utilisateurs ont besoin de Node.js installé, ou vous devez regrouper tout le runtime
  • Temps de démarrage : Les démarrages à froid peuvent être lents, surtout avec beaucoup de dépendances
  • Taille du binaire : Les exécutables groupés peuvent être massifs

Pourquoi Go ?

Go résout ces problèmes élégamment :

package main

import "fmt"

func main() {
    fmt.Println("Bonjour, CLI!")
}

Ceci compile en un seul binaire statique qui s'exécute partout. Aucun runtime requis.

Avantages clés

  1. Compilation rapide — Le compilateur Go est incroyablement rapide
  2. Cross-compilation — Construisez pour n'importe quelle plateforme depuis n'importe quelle plateforme
  3. Excellente bibliothèque standard — La plupart des choses dont vous avez besoin sont intégrées
  4. Primitives de concurrence — Les goroutines rendent les opérations parallèles simples

Le processus de migration

J'ai abordé la réécriture de manière incrémentale :

  1. Commencé avec les structures de données principales
  2. Porté l'analyse des arguments de ligne de commande (utilisant Cobra)
  3. Migré les opérations du système de fichiers
  4. Ajouté des tests pour chaque composant

Résultats

Après la réécriture :

  • Taille du binaire : 8MB (contre 45MB regroupé)
  • Temps de démarrage : ~10ms (contre ~500ms)
  • Aucune dépendance externe pour les utilisateurs

Conclusion

Go n'est pas le bon choix pour chaque projet, mais pour les outils CLI, il est difficile à battre. La combinaison d'une distribution facile, d'excellentes performances et d'une grande expérience développeur en fait mon choix de prédilection pour ce type de travail.