Comment comparer des chaînes dans GoLang?

Je ne suis pas en mesure de produire un résultat «vrai» en ce qui concerne la comparaison de chaînes Go. J’ai écrit ce qui suit pour expliquer le problème et joindre une capture d’écran de la sortie

// ssortingng comparison in Go package main import "fmt" import "bufio" import "os" func main() { var isLetterA bool fmt.Println("Enter the letter a") reader := bufio.NewReader(os.Stdin) input, _ := reader.ReadSsortingng('\n') if(input == "a") { isLetterA = true } else { isLetterA = false } fmt.Println("You entered",input) fmt.Println("Is it the letter a?",isLetterA) } 

Exemple

== est l’opérateur correct pour comparer des chaînes dans Go. Cependant, les chaînes que vous lisez depuis STDIN avec reader.ReadSsortingng ne contiennent pas "a" , mais "a\n" (si vous regardez attentivement, vous verrez le saut de ligne supplémentaire dans votre exemple de sortie).

Vous pouvez utiliser la fonction ssortingngs.TrimRight pour supprimer les espaces blancs de fin de votre entrée:

 if ssortingngs.TrimRight(input, "\n") == "a" { // ... } 

Pour les utilisateurs indépendants de la plate-forme ou les utilisateurs de Windows, vous pouvez:

import runtime:

 import ( "runtime" "ssortingngs" ) 

puis découpez la chaîne comme ceci:

 if runtime.GOOS == "windows" { input = ssortingngs.TrimRight(input, "\r\n") } else { input = ssortingngs.TrimRight(input, "\n") } 

maintenant vous pouvez le comparer comme ça:

 if ssortingngs.Compare(input, "a") == 0 { //....yourCode } 

C’est une meilleure approche lorsque vous utilisez STDIN sur plusieurs plates-formes.

Explication

Ceci est dû au fait que sur les lignes Windows se terminent par "\r\n" appelé CRLF, mais que les lignes UNIX se terminent par "\n" connu sous le nom de LF. nous coupons "\r\n" sur Windows.