Membaca Kekunci Khas dalam Go daripada Stdin
Apabila membaca input pengguna daripada stdin dalam Go, selalunya perlu untuk mengesan kunci khas seperti " masukkan" atau "ruang belakang" untuk arahan atau operasi penyuntingan tertentu. Untuk mencapai matlamat ini, mari kita teroka pendekatan yang sesuai untuk mentafsir kunci khas ini.
Dalam coretan kod yang disediakan, atur cara membaca stdin secara berterusan dan menambahkan input pada rentetan. Untuk mengesan kunci tertentu, kita perlu menentukan tatasusunan bait atau perwakilan rentetan yang sepadan.
Untuk mencari nilai ini, kita boleh menggunakan perpustakaan seperti termbox-go. Ia menyediakan antara muka dipacu peristiwa yang membolehkan kami menangkap penekanan kekunci dan kod yang berkaitan dengannya.
Pertimbangkan kod berikut menggunakan termbox-go:
package main import ( "fmt" term "github.com/nsf/termbox-go" ) func main() { err := term.Init() if err != nil { panic(err) } defer term.Close() fmt.Println("Press any key to see their ASCII code or press ESC button to quit") keyPressListenerLoop: for { switch ev := term.PollEvent(); ev.Type { case term.EventKey: switch ev.Key { case term.KeyEsc: break keyPressListenerLoop case term.KeyEnter: // Handle enter key press case term.KeyBackspace: // Handle backspace key press // Add other special keys here } case term.EventError: panic(ev.Err) } } }
Kod ini menyediakan pendengar acara menggunakan termbox-go dan menunggu acara akhbar utama. Apabila kekunci ditekan, kod itu menyemak jenis dan kod kekuncinya. Berdasarkan kod kunci, logik tersuai boleh dilaksanakan untuk mengendalikan kunci tertentu seperti "masuk" atau "ruang belakang." Contohnya:
case term.KeyEnter: fmt.Println("Enter key pressed") case term.KeyBackspace: fmt.Println("Backspace key pressed")
Sebagai alternatif, pendekatan yang lebih mudah tersedia jika satu-satunya keperluan adalah untuk mengesan tekan kekunci "masuk":
package main import ( "fmt" "os" "bufio" ) func main() { fmt.Println("Press ESC button or Ctrl-C to exit this program") fmt.Println("Press Enter to continue") for { consoleReader := bufio.NewReaderSize(os.Stdin, 1) fmt.Print("> ") input, _ := consoleReader.ReadByte() ascii := input // ESC = 27 and Ctrl-C = 3 if ascii == 27 || ascii == 3 { fmt.Println("Exiting...") os.Exit(0) } if ascii == 10 { // Enter key has ASCII value 10 fmt.Println("Enter key pressed") } } }
Kod ini menggunakan consoleReader bufio untuk membaca a aksara tunggal pada satu-satu masa, membolehkan ia mengesan tekan kekunci "masuk".
Dengan memanfaatkan pendekatan ini, pembangun boleh mengendalikan input utama khas dalam program Go dengan berkesan apabila membaca daripada stdin.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Kunci Khas (Seperti Enter dan Backspace) daripada Input Standard dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!