2013-03-01 43 views
12

Tôi muốn ứng dụng của tôi cho thấy:Đọc một nhân vật từ đầu vào tiêu chuẩn tại Gò (mà không cần nhấn Enter)

press any key to exit ...

Và khi tôi nhấn một phím bất kỳ , nó thoát.

Tôi làm cách nào để đạt được điều này?

Lưu ý: Tôi đã googled nhưng tất cả những gì tôi đã tìm thấy cần thiết để nhấn nhập ở cuối. Tôi muốn một cái gì đó như Console.ReadKey() trong C#.

Tôi đang chạy MS Windows.

+3

thể trùng lặp của [ Hàm Golang tương tự như getchar] (http://stackoverflow.com/questions/14094190/golang-function-similar-to-getchar) – zzzz

+1

@jnml Không; đây không phải là một bản sao. Tôi đã nhìn thấy câu hỏi đó trước và sử dụng mã được cung cấp trong câu trả lời bạn vẫn cần nhấn enter tại stdin. –

+0

Tính trùng lặp chỉ là về câu hỏi, không phải về bất kỳ câu trả lời nào cho câu hỏi đó. – zzzz

Trả lời

9

termbox-go là gói Go-native có trọng lượng nhẹ cung cấp một số điều khiển thiết bị đầu cuối thô sơ. Bao gồm khả năng nhận dữ liệu đầu vào ở chế độ thô (đọc từng ký tự một lần mà không có hành vi đệm theo mặc định).

Nó cũng có khả năng tương thích khá tốt trên các hệ thống khác nhau.

keyboard mở rộng hộp kiểm đi để cung cấp thêm một số chức năng bàn phím như phím tắt và chuỗi đa phím.

+0

Đó không phải là định nghĩa của raw_mode. – Awn

1

Bạn có thể đọc một lần nhấn phím từ thiết bị đầu cuối ở chế độ thô. Here là gói phải cung cấp chế độ thiết bị đầu cuối thô cho chương trình của bạn. Catch: nó chỉ là Linux.

11

Đây là một ví dụ làm việc tối thiểu cho những người điều hành một hệ thống UNIX:

package main 

import (
    "fmt" 
    "os" 
    "os/exec" 
) 

func main() { 
    // disable input buffering 
    exec.Command("stty", "-F", "/dev/tty", "cbreak", "min", "1").Run() 
    // do not display entered characters on the screen 
    exec.Command("stty", "-F", "/dev/tty", "-echo").Run() 

    var b []byte = make([]byte, 1) 
    for { 
     os.Stdin.Read(b) 
     fmt.Println("I got the byte", b, "("+string(b)+")") 
    } 
} 
+0

Làm cách nào để hiển thị các ký tự được nhập lại trên màn hình? – Ibolit

+0

Ibolit: Chúng đã được hiển thị trong ví dụ. Để chỉ hiển thị các ký tự, 'fmt.Print (chuỗi (b))' sẽ hoạt động. – blinry

3

Bạn có thể sử dụng thư viện này (tôi): https://github.com/eiannone/keyboard

Đây là một ví dụ cho nhận được một phím tắt duy nhất:

char, _, err := keyboard.GetSingleKey() 
if (err != nil) { 
    panic(err) 
} 
fmt.Printf("You pressed: %q\r\n", char) 
Các vấn đề liên quan