3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
在閱讀 os.Stdin.Read() 并找到這個(gè)答案后,我創(chuàng)建了以下代碼:
package main
import (
? ? "fmt"
? ? "os"
? ? "time"
? ? "os/exec"
)
func main() {
? ? ch := make(chan string)
? ? go func(ch chan string) {
? ? ? ? // 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)
? ? ? ? ? ? ch <- string(b)
? ? ? ? }
? ? }(ch)
? ? for {
? ? ? ? select {
? ? ? ? ? ? case stdin, _ := <-ch:
? ? ? ? ? ? ? ? fmt.Println("Keys pressed:", stdin)
? ? ? ? ? ? default:
? ? ? ? ? ? ? ? fmt.Println("Working..")
? ? ? ? }
? ? ? ? time.Sleep(time.Millisecond * 100)
? ? }
}
這就像一個(gè)魅力。

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
因?yàn)槟阏谑褂?code>ReadStringwhich 期望你給它的任何參數(shù),在你的情況下 - 關(guān)鍵return
。根據(jù)文檔:
ReadString 一直讀取到輸入中第一次出現(xiàn) delim,返回一個(gè)包含數(shù)據(jù)的字符串,直到并包括分隔符。
這意味著在您按下該鍵之前,該方法不會(huì)返回return
。
您可以改用常規(guī)的Read方法來(lái)讀取您需要的字符。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
如果你想檢查是否按下了某個(gè)鍵而不阻塞它所在的進(jìn)程,你應(yīng)該使用這樣的東西:
import (
...
"golang.org/x/sys/windows"
)
var user32_dll = windows.NewLazyDLL("user32.dll")
var GetKeyState = user32_dll.NewProc("GetKeyState")
func wasESCKeyPressed() bool {
r1, _, _ := GetKeyState.Call(27) // Call API to get ESC key state.
return r1 == 65409 // Code for KEY_UP event of ESC key.
}
func loop() {
for {
// Do something...
if wasESCKeyPressed() {
break
}
// Do something...
time.Sleep(time.Millisecond * 10)
}
}
- 3 回答
- 0 關(guān)注
- 215 瀏覽
添加回答
舉報(bào)