Go : vérifier si une chaîne contient une sous-chaîne — guide complet

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

Comment vérifier en Go si une chaîne contient une sous-chaîne ? Du débutant au pro

\n\n

Avez-vous déjà écrit en Go et soudainement hésité devant une question simple : « Cette chaîne contient-elle la partie dont j’ai besoin ? » Si oui, vous n’êtes pas seul. Sur Stack Overflow, cette question a recueilli des milliers de vues, et ce n’est pas pour rien. Go propose plusieurs façons élégantes de résoudre ce problème, mais laquelle choisir ? Découvrons-le une fois pour toutes.

\n\n

Dans cet article, nous ne nous contenterons pas de vous montrer la fonction strings.Contains. Nous vous apprendrons à penser comme un développeur Go : choisir l’outil optimal pour chaque situation, éviter les pièges et écrire un code rapide et prévisible.

\n\n

Table des matières

\n\n\n

1. strings.Contains — votre premier ami

\n\n

Commençons par la méthode la plus simple et la plus populaire. La fonction strings.Contains de la bibliothèque standard de Go est ce dont vous avez besoin dans 80 % des cas. Elle renvoie true si la chaîne contient la sous-chaîne spécifiée, et false dans le cas contraire.

\n\n

Voici à quoi cela ressemble dans du code réel :

\n\n
package main\n\nimport (\n    "fmt"\n    "strings"\n)\n\nfunc main() {\n    str := "Bonjour, monde Go!"\n    substr := "monde"\n\n    if strings.Contains(str, substr) {\n        fmt.Println("La chaîne contient la sous-chaîne :", substr)\n    } else {\n        fmt.Println("Sous-chaîne non trouvée")\n    }\n}\n
\n\n

Sortie :

\n
La chaîne contient la sous-chaîne : monde
\n\n

Simple, n’est-ce pas ? La fonction est sensible à la casse : strings.Contains("Go", "go") renverra false. Si vous devez ignorer la casse, vous devrez utiliser strings.ToLower ou strings.EqualFold.

\n\n

Exemple avec ignorance de la casse

\n\n
str := "Golang est génial"\nsubstr := "golang"\n\nif strings.Contains(strings.ToLower(str), strings.ToLower(substr)) {\n    fmt.Println("Trouvé (sans tenir compte de la casse) !")\n}\n
\n\n

Quand l’utiliser : lorsque vous avez besoin d’une réponse binaire simple — « oui » ou « non ». Sans détails superflus.

\n\n

2. strings.Index — quand vous avez besoin de connaître la position

\n\n

Parfois, savoir qu’une sous-chaîne existe ne suffit pas. Vous voulez comprendre où elle se trouve exactement. Par exemple, vous analysez un journal et souhaitez extraire une partie de la chaîne après un certain marqueur. C’est là que strings.Index vient à la rescousse.

\n\n

Cette fonction renvoie l’index de la première occurrence de la sous-chaîne (à partir de 0) ou -1 si la sous-chaîne n’est pas trouvée.

\n\n
str := "Erreur : fichier non trouvé dans /var/log"\nsubstr := "fichier"\n\npos := strings.Index(str, substr)\nif pos != -1 {\n    fmt.Printf("Sous-chaîne trouvée à la position %d\\n", pos)\n    fmt.Printf("Contexte : %s\\n", str[pos:])\n} else {\n    fmt.Println("Sous-chaîne non trouvée")\n}\n
\n\n

Sortie :

\n
Sous-chaîne trouvée à la position 8\nContexte : fichier non trouvé dans /var/log
\n\n

Il existe d’autres variantes :

\n
    \n
  • strings.LastIndex — recherche la dernière occurrence
  • \n
  • strings.IndexAny — recherche la première occurrence de n’importe quel caractère d’un ensemble
  • \n
  • strings.IndexRune — recherche un caractère Unicode spécifique
  • \n
\n\n
// Exemple avec LastIndex\nstr := "a-b-c-d"\nlastDash := strings.LastIndex(str, "-")\nfmt.Println("Dernier tiret à la position :", lastDash) // 5\n\n// Exemple avec IndexAny\nstr2 := "hello world"\npos := strings.IndexAny(str2, "aeiou")\nfmt.Println("Première voyelle à la pos                

Blogs

Book Recommendations