fmt.Scanln Expectation
Go で fmt.Scanln を使用すると、「fmt.Scanln Expected newline」というエラーが発生することがあります。このエラーとその影響を理解することは、デバッグや堅牢なコードの作成にとって重要です。
fmt.Scan と fmt.Scanln の動作
fmt.Scan はスペース区切りの値を読み取ります。標準入力から、改行をスペース文字として扱います。これは、すべての引数が入力されるか、エラーが発生するまで入力の解析を続けることを意味します。一方、 fmt.Scanln も標準入力から読み取りますが、終了点として改行文字を期待します。それ以降の入力は解析されません。
例
提供された Go コードでは、fmt.Scanln を使用して文字列 s を読み取るときに問題が発生します。入力には改行文字が含まれており、これにより fmt.Scanln の入力の終了がトリガーされます。ただし、後続の入力文字「みんなアイスクリームが大好き」はまだ存在しており、後続の fmt.Scan によって消費されます。 fmt.Scan は入力の最後に改行を期待しているため、これによりエラーが発生します。
代替手段
スペースを含み改行で終わるテキスト行を読み取るには、bufio.Reader の ReadString メソッドの使用を検討してください:
<code class="go">import "bufio" func main() { reader := bufio.NewReader(os.Stdin) line, err := reader.ReadString('\n') }</code>
結論
fmt.Scan と fmt.Scanln の異なる動作を理解することは、エラーを防止して書き込みを行うために重要です。期待に沿ったコード。テキスト行を読むとき、bufio.Reader や ReadString などの代替手段は、より明示的で効率的なソリューションを提供します。
以上が「fmt.Scanln Expected Newline」エラーの原因とその解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。