fmt.Scanln Expectation
Apabila menggunakan fmt.Scanln in Go, seseorang mungkin menghadapi ralat: "fmt.Scanln expected newline." Memahami ralat ini dan implikasinya adalah penting untuk penyahpepijatan dan menulis kod yang mantap.
Gelagat fmt.Scan vs fmt.Scanln
fmt.Scan membaca nilai yang dipisahkan oleh ruang daripada input standard, menganggap baris baharu sebagai aksara ruang. Ini bermakna ia akan meneruskan penghuraian input sehingga sama ada semua hujah diisi atau ralat berlaku. Sebaliknya, fmt.Scanln juga membaca daripada input standard tetapi menjangkakan aksara baris baharu sebagai titik penamatan. Sebarang input selepas itu tidak akan dihuraikan.
Contoh
Dalam kod Go yang disediakan, isu timbul apabila menggunakan fmt.Scanln untuk membaca rentetan s. Input termasuk aksara baris baharu, yang mencetuskan penamatan input untuk fmt.Scanln. Walau bagaimanapun, aksara input seterusnya "semua orang suka ais krim" masih ada dan digunakan oleh fmt.Scan berikutnya. Ini menyebabkan ralat, kerana fmt.Scan menjangkakan baris baharu pada penghujung input.
Alternatif
Untuk membaca baris teks termasuk ruang dan berakhir dengan baris baharu , pertimbangkan untuk menggunakan kaedah bufio.Reader's ReadString:
<code class="go">import "bufio" func main() { reader := bufio.NewReader(os.Stdin) line, err := reader.ReadString('\n') }</code>
Kesimpulan
Memahami gelagat berbeza fmt.Scan dan fmt.Scanln adalah penting untuk mengelakkan ralat dan menulis kod yang sejajar dengan jangkaan. Apabila membaca baris teks, alternatif seperti bufio.Reader dan ReadString menyediakan penyelesaian yang lebih jelas dan cekap.
Atas ialah kandungan terperinci Apa yang Menyebabkan Ralat \'fmt.Scanln Jangkaan Newline\' dan Bagaimana untuk Menyelesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!