Supprimer les espaces en Go : comment se débarrasser des caractères superflus dans une chaîne

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Un problème familier à chaque développeur

\n\n

Imaginez : 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\n

Dans ce guide, vous apprendrez :

\n
    \n
  • Comment utiliser la bibliothèque standard strings pour supprimer les espaces.
  • \n
  • En quoi TrimSpace diffère de TrimLeft et TrimRight.
  • \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
\n\n

C'est parti !

\n\n

Démarrage rapide : strings.TrimSpace

\n\n

La 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.

\n\n

Voici à quoi cela ressemble dans le code :

\n\n
package 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\n

Sortie :

\n
Originale : "   Bonjour le monde !   \\n\\t"\nNettoyée : "Bonjour le monde !"\n
\n\n

Notez 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.

\n\n

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.

\n\n

Réglage fin : TrimLeft et TrimRight

\n\n

Parfois, 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.

\n\n

Exemple :

\n\n
package 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\n

Sortie :

\n
Gauche : "Bonjour   "\nDroite : "   \\t\\n   Bonjour"\n
\n\n

Important : 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.

\n\n

Équivalent de TrimSpace pour un seul côté

\n\n

Si 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\n
func 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\n

Ou, pour ceux qui aiment la concision, utiliser strings.TrimSpace avec une astuce :

\n\n
// 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                

Blogs

Book Recommendations