Un problème familier à chaque développeur
\n\nImaginez : vous écrivez un analyseur de logs, vous traitez une saisie utilisateur depuis un formulaire ou vous préparez des données pour une API. Les chaînes arrivent avec des espaces superflus au début et à la fin. Si vous ne les supprimez pas — bugs, comparaisons cassées, JSON déformés et des heures de débogage perdues. C'est un problème classique qui a rassemblé des milliers de vues sur Stack Overflow. Aujourd'hui, nous allons le résoudre en Go — rapidement, élégamment et sans surprises.
\n\nDans ce guide, vous apprendrez :
\n- \n
- Comment utiliser la bibliothèque standard
stringspour supprimer les espaces. \n - En quoi
TrimSpacediffère deTrimLeftetTrimRight. \n - Comment écrire votre propre fonction personnalisée pour les caractères whitespace non standard. \n
- Comment éviter les pièges avec Unicode et les tabulations. \n
C'est parti !
\n\nDémarrage rapide : strings.TrimSpace
\n\nLa manière la plus simple et la plus populaire de supprimer les espaces des deux extrémités d'une chaîne est d'utiliser la fonction strings.TrimSpace du package standard strings. Elle supprime tous les caractères que Go considère comme des "espaces" (whitespace) : espaces ordinaires, tabulations, sauts de ligne, retours chariot et même les tabulations verticales.
Voici à quoi cela ressemble dans le code :
\n\npackage main\n\nimport (\n "fmt"\n "strings"\n)\n\nfunc main() {\n raw := " Bonjour le monde ! \\n\\t"\n cleaned := strings.TrimSpace(raw)\n \n fmt.Printf("Originale : %q\\n", raw)\n fmt.Printf("Nettoyée : %q\\n", cleaned)\n}\n\n\nSortie :
\nOriginale : " Bonjour le monde ! \\n\\t"\nNettoyée : "Bonjour le monde !"\n\n\nNotez que %q dans fmt.Printf affiche la chaîne avec les séquences d'échappement — c'est pratique pour le débogage afin de voir les caractères cachés.
Quand l'utiliser : dans 90 % des cas, cela suffit. Si vous avez simplement besoin de "nettoyer" une chaîne des déchets sur les bords — utilisez TrimSpace.
Réglage fin : TrimLeft et TrimRight
\n\nParfois, vous devez supprimer les espaces uniquement à gauche ou uniquement à droite. Pour cela, Go propose strings.TrimLeft et strings.TrimRight. Mais il y a une nuance : elles ne fonctionnent pas avec les "caractères d'espacement" par défaut, mais avec un ensemble de caractères passé en argument.
Exemple :
\n\npackage main\n\nimport (\n "fmt"\n "strings"\n)\n\nfunc main() {\n s := " \\t\\n Bonjour "\n \n // Supprime uniquement à gauche (espaces, tabulations, sauts de ligne)\n left := strings.TrimLeft(s, " \\t\\n")\n fmt.Printf("Gauche : %q\\n", left)\n \n // Supprime uniquement à droite (uniquement les espaces)\n right := strings.TrimRight(s, " ")\n fmt.Printf("Droite : %q\\n", right)\n}\n\n\nSortie :
\nGauche : "Bonjour "\nDroite : " \\t\\n Bonjour"\n\n\nImportant : TrimLeft et TrimRight suppriment tous les caractères du second argument jusqu'à ce qu'elles rencontrent un caractère qui n'y figure pas. Si vous spécifiez uniquement l'espace " ", alors la tabulation \\t restera intacte.
Équivalent de TrimSpace pour un seul côté
\n\nSi vous devez supprimer tous les whitespace uniquement à gauche ou uniquement à droite, mais que vous avez la flemme d'énumérer tous les caractères, vous pouvez écrire une petite fonction d'encapsulation :
\n\nfunc trimLeftSpace(s string) string {\n return strings.TrimLeft(s, " \\t\\n\\r\\v\\f")\n}\n\nfunc trimRightSpace(s string) string {\n return strings.TrimRight(s, " \\t\\n\\r\\v\\f")\n}\n\n\nOu, pour ceux qui aiment la concision, utiliser strings.TrimSpace avec une astuce :
// Supprime uniquement à gauche : d'abord on inverse, puis TrimSpace, puis on réinverse\nfunc trimLeftSpace(s string) string {\n runes := []rune(s)\n for i, r := range runes {\n if !unicode.IsSpace(r) {\n return string(runes[i:])\n }\n }\n