Je suis incapable de produire un résultat "vrai" en matière de comparaison de chaînes Go. J'ai écrit ce qui suit pour expliquer le problème et joint une capture d'écran de la sortie
// string 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.ReadString('\n')
if(input == "a") {
isLetterA = true
} else {
isLetterA = false
}
fmt.Println("You entered",input)
fmt.Println("Is it the letter a?",isLetterA)
}
_==
_ est l'opérateur approprié pour comparer les chaînes dans Go. Toutefois, les chaînes que vous lisez dans STDIN avec _reader.ReadString
_ ne contiennent pas _"a"
_, mais _"a\n"
_ (si vous regardez de plus près, vous verrez un saut de ligne supplémentaire dans votre exemple de sortie).
Vous pouvez utiliser la fonction strings.TrimRight
pour supprimer les espaces blancs de fin de votre entrée:
_if strings.TrimRight(input, "\n") == "a" {
// ...
}
_
Pour les utilisateurs indépendants de la plate-forme ou les utilisateurs Windows, vous pouvez:
durée d'importation:
import (
"runtime"
"strings"
)
puis coupez la chaîne comme ceci:
if runtime.GOOS == "windows" {
input = strings.TrimRight(input, "\r\n")
} else {
input = strings.TrimRight(input, "\n")
}
maintenant vous pouvez le comparer comme ça:
if strings.Compare(input, "a") == 0 {
//....yourCode
}
C'est une meilleure approche lorsque vous utilisez STDIN sur plusieurs plates-formes.
Cela se produit parce que sur les lignes Windows se termine par "\r\n"
qui est appelé CRLF, alors que sur les lignes UNIX se termine par "\n"
qui est appelé LF et que nous ajustons donc "\n"
sur les systèmes d’exploitation unix alors que nous ajustons "\r\n"
sur Windows.
Le contenu des chaînes dans Golang peut être comparé à l'aide de l'opérateur ==
. Si les résultats ne sont pas conformes à vos attentes, il peut y avoir des caractères cachés tels que \n
, \r
, des espaces, etc. Donc, en règle générale, essayez de supprimer les fonctions fournies par strings
paquet en golang.
Par exemple, les espaces peuvent être supprimés à l'aide de la fonction strings.TrimSpace
. Vous pouvez également définir une fonction personnalisée pour supprimer tout caractère dont vous avez besoin. La fonction strings.TrimFunc
peut vous donner plus de puissance.