Reader.ReadString May Preserve Leading Delimiters
Go では、入力を解析するときに bufio.Reader.ReadString の動作が異なる場合があります。次のシナリオを考えてみましょう:
import ( "bufio" "fmt" "os" ) func main() { reader := bufio.NewReader(os.Stdin) fmt.Print("Who are you? Enter your name: ") text, _ := reader.ReadString('\n') if text == "Alice" || text == "Bob" { fmt.Printf("Hello, ", text) } else { fmt.Printf("You're not allowed in here!") } }
ここでは、ReadString はユーザー入力の読み取りに使用され、改行文字で終了する名前を想定しています。ただし、入力された名前が「Alice」または「Bob」と一致すると、プログラムは誤ってアクセスを拒否します。
原因と解決策
この問題は、ReadString が先頭の出現箇所を保持するために発生します。区切り文字 (この場合は「n」)。 「Alice」のような名前を入力すると、テキストに保存される文字列には「Alice」と末尾の改行の両方が含まれます。この余分な改行文字により、文字列比較が期待値と一致しなくなります。
この問題を解決するには、次の方法を検討してください。
以上がGo の `bufio.Reader.ReadString` が先頭の区切り文字を保持するのはなぜですか? この問題を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。