« J'ai installé un package, mais je n'arrive pas à le supprimer ! » — une histoire qui vous parle ?
\n\nVous commencez tout juste à apprendre Go, vous trouvez une bibliothèque géniale sur GitHub, vous tapez go get github.com/example/package — et tout fonctionne ! Mais le temps passe, votre projet évolue, et vous réalisez : ce package n'est plus nécessaire. Vous cherchez la commande go remove ou go uninstall, mais... elle n'existe tout simplement pas.
Bienvenue dans l'univers de Go, où la suppression de packages n'est pas un simple bouton, mais une petite aventure. Dans cet article, nous allons voir où les packages atterrissent après un go get, comment les « déloger » correctement et pourquoi Go a été conçu ainsi. Spoiler : après avoir lu cet article, vous ne craindrez plus les fichiers inutiles et saurez garder vos projets propres et organisés.
Comment fonctionne go get : les bases essentielles
\n\nAvant de supprimer, comprenons où le package est installé. Dans Go (avant la version 1.16, mais cette information est toujours pertinente), la commande go get téléchargeait le code source du package dans deux répertoires :
- \n
$GOPATH/src— le code source du package (comme si vous aviez cloné le dépôt) ; \n $GOPATH/pkg— les fichiers objets compilés (.a). \n
Si vous utilisez les modules Go (et depuis la version 1.16, c'est le mode par défaut), go get fonctionne différemment : il ajoute la dépendance dans go.mod et télécharge le module dans le cache ($GOPATH/pkg/mod).
Le problème est que Go n'a pas de commande intégrée pour « supprimer un package ». Les développeurs du langage estiment que si un package ne vous est plus utile, il suffit de ne plus l'importer dans votre code. Cela semble logique, mais que faire si vous voulez libérer de l'espace ou faire le ménage ?
\n\nMéthode n°1 : go clean -i (pour les anciens projets sans modules)
\n\nAvant l'ère des modules, il existait la commande go clean -i. Elle supprimait les fichiers compilés du package dans $GOPATH/pkg. Mais elle ne touchait pas au code source. Autrement dit, vous supprimiez uniquement les artefacts binaires, mais le code restait dans src.
# Supprimer les fichiers compilés du package\ngo clean -i github.com/example/package\n\n# Le code source est toujours là :\nls $GOPATH/src/github.com/example/package\n\nEn pratique, ce n'était pas pratique. C'est pourquoi dans les versions modernes de Go (à partir de la 1.12), go clean -i est déprécié. Si vous tapez go clean -i aujourd'hui, Go ignore simplement le flag -i et exécute un simple go clean (suppression des fichiers objets dans le projet courant).
Méthode n°2 : Suppression manuelle dans GOPATH (pour les vétérans)
\n\nSi vous travaillez encore sans modules (ou si vous voulez simplement nettoyer de vieux fichiers), vous devrez passer par une suppression manuelle. Voici la recette complète :
\n\n- \n
- Trouvez où se trouve votre
$GOPATH: \n
go env GOPATH\n\nGénéralement, c'est /home/user/go ou C:\\Users\\user\\go.
- \n
- Supprimez le code source : \n
rm -rf $GOPATH/src/github.com/example/package\n\n- \n
- Supprimez les fichiers compilés (s'ils existent) : \n
rm -rf $GOPATH/pkg/linux_amd64/github.com/example/package.a\n\n\n\n\nImportant : Le chemin du fichier
\n.adépend de votre système d'exploitation et de votre architecture.linux_amd64est un exemple typique. Vous pouvez connaître le chemin exact avecgo list -m, mais il est plus simple de supprimer tout le dossier du package danspkg.
Cette méthode fonctionne, mais elle est brutale. Vous risquez de supprimer accidentellement quelque chose d'important. De plus, si le package était utilisé dans d'autres projets, ceux-ci cesseront de fonctionner.
\n\nMéthode n°3 : L'approche moderne — go mod tidy
\n\nSi vous utilisez les modules Go (et vous devriez les utiliser si vous avez commencé à apprendre en 2024), tout est beaucoup plus élégant. Lorsque vous cessez d'importer un package dans votre code, il cesse automatiquement d'être