Dalam bahasa Go, anda boleh menggunakan kaedah scan
untuk membaca data daripada input standard. Kaedah scan
boleh membaca sebarang jenis data, termasuk rentetan, nombor, nilai Boolean, dsb. Artikel ini akan memperkenalkan secara terperinci cara menggunakan kaedah scan
untuk melaksanakan input konsol.
scan
Sintaks asas kaedah adalah seperti berikut:
func Scan(a ...interface{}) (n int, err error)
Baca data daripada input dan simpannya ke dalam parameter yang ditentukan. Parameter a
mewakili data yang perlu dibaca Sebarang bilangan parameter boleh dihantar. Setiap parameter ialah jenis penunjuk yang digunakan untuk menyimpan data input. Nilai pulangan n
menunjukkan bilangan parameter yang berjaya dibaca dan nilai pulangan err
menunjukkan kemungkinan ralat.
Berikut ialah contoh mudah yang menunjukkan cara membaca dua integer daripada konsol:
func main() { var a, b int fmt.Print("请输入两个整数:") n, err := fmt.Scan(&a, &b) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []int{a, b}) }
Melalui kod di atas, kita boleh melihat penggunaan asas kaedah Scan
. Melaksanakan kod di atas, atur cara akan menggesa pengguna memasukkan dua integer Selepas input pengguna selesai, atur cara akan menyimpan dua integer ke dalam pembolehubah a
dan b
dan mengeluarkan dua integer. Kaedah
Scan
mempunyai ciri-ciri berikut:
Scan
semasa membaca data , jarak antara. data akan diabaikan secara automatik. Seperti yang ditunjukkan dalam kod berikut:
func main() { var a, b, c string fmt.Print("请输入三个字符串:") n, err := fmt.Scan(&a, &b, &c) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []string{a, b, c}) }
Masukkan rentetan hello world go
, program secara automatik akan mengabaikan ruang antara rentetan dan mengeluarkan tiga rentetan ini.
Scan
kaedah akan menunggu pengguna memasukkan aksara pemulangan pengangkutan n
apabila membaca data, menunjukkan bahawa input telah selesai. Jika pengguna tidak memasukkan aksara carriage return, program akan menunggu input pengguna. Seperti yang ditunjukkan dalam kod berikut:
func main() { var s string fmt.Print("请输入一个字符串:") n, err := fmt.Scan(&s) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, s) }
Selepas memasukkan rentetan hello
, atur cara tidak akan mengeluarkan hasil serta-merta, tetapi menunggu pengguna memasukkan aksara carriage return n
sebelum mengeluarkan hasil.
Scan
tidak akan dibaca apabila membaca data aksara baris baharu n
dalam input tidak akan dibaca. Contohnya, apabila kita membaca rentetan melalui kaedah Scan
, aksara baris baharu n
dalam rentetan input tidak akan dibaca. Seperti yang ditunjukkan dalam kod berikut:
func main() { var s string fmt.Print("请输入一个字符串:") n, err := fmt.Scan(&s) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, s) }
Rentetan input hellonworld
, atur cara hanya akan membaca rentetan hello
dan tidak akan membaca aksara baris baharu n
dalam rentetan.
Scan
adalah berdasarkan fungsi fmt
pakej Scanf
. Kaedah Scanf
mempunyai ciri berikut:
Scanf
menyokong input berformat. Anda boleh menentukan jenis data untuk dibaca melalui rentetan format. Sebagai contoh, kita boleh membaca integer dan rentetan melalui rentetan format berikut:
func main() { var a int var b string fmt.Print("请输入一个整数和一个字符串:") n, err := fmt.Scanf("%d %s", &a, &b) if err != nil { fmt.Println(err) return } fmt.Printf("成功读取了 %d 个参数:%v\n", n, []interface{}{a, b}) }
Dalam kod di atas, rentetan format yang ditentukan "%d %s"
bermaksud membaca integer dahulu, dan kemudian Baca rentetan dipisahkan oleh ruang.
Scanf
menyokong pemisah tersuai. Secara lalai, kaedah Scanf
menggunakan ruang sebagai pembatas. Pembatas boleh disesuaikan melalui parameter Scanf
kaedah ScanState
. Seperti yang ditunjukkan dalam kod berikut:
func main() { var a, b string fmt.Print("请输入两个字符串,用逗号分隔:") s := bufio.NewScanner(os.Stdin) s.Split(func(data []byte, atEOF bool) (adv int, token []byte, err error) { for i := 0; i < len(data); i++ { if data[i] == ',' { return i + 1, data[:i], nil } } return 0, data, bufio.ErrFinalToken }) if s.Scan() { a = s.Text() } if s.Scan() { b = s.Text() } fmt.Printf("您输入的字符串是:%v\n", []string{a, b}) }
Dalam kod di atas, kami mencipta objek bufio
melalui kaedah NewScanner
pakej Scanner
dan menyesuaikan pemisah melalui Split
kaedah . Dalam fungsi pembatas, kami menggunakan koma sebagai pembatas untuk menghuraikan rentetan input dan menyimpannya ke dalam pembolehubah a
dan b
.
Melalui pengenalan artikel ini, kami telah mempelajari tentang sintaks asas dan ciri kaedah Scan
dan cara melaksanakan input konsol. Perlu diingat bahawa kaedah Scan
tidak membaca aksara baris baharu n
ke dalam input semasa memproses input. Selain itu, kaedah Scanf
menyokong pembatas tersuai dan input berformat, yang boleh mengendalikan input konsol dengan lebih fleksibel.
Atas ialah kandungan terperinci Cara menggunakan kaedah imbasan untuk melaksanakan input konsol. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!