我想从命令行读取输入,但是在我被提示输入之前,我的尝试已经结束,程序退出.我在C#中寻找相当于Console.ReadLine()的东西.
这就是我目前拥有的:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
fmt.Println(text)
fmt.Println("Enter text: ")
text2 := ""
fmt.Scanln(text2)
fmt.Println(text2)
ln := ""
fmt.Sscanln("%v", ln)
fmt.Println(ln)
}
Run Code Online (Sandbox Code Playgroud) 如何使用fmt.ScanfGo中的函数从标准输入获取整数输入?
如果无法使用fmt.Scanf,那么读取单个整数的最佳方法是什么?
有没有办法检查输入流(os.Stdin)是否有数据?
从GO的初始stdin读取帖子?显示了如何读取数据,但不幸的是,如果没有数据通过管道输入stdin,则会阻塞.
我有一个循环,其中一些事情根据它运行的状态(手动/自动/学习)发生。我现在希望能够通过按键盘上的附带字母(“m”表示手动,“a”表示自动,“l”表示学习)来让程序在这些状态之间切换。
因此,要做到这一点,我需要能够在循环期间捕获按键并相应地更改变量状态。我现在有以下内容,它可以捕获按键然后输入:
ch := make(chan string)
go func(ch chan string) {
reader := bufio.NewReader(os.Stdin)
for {
s, _ := reader.ReadString('\n')
ch <- s
}
}(ch)
for {
select {
case stdin, _ := <-ch:
fmt.Println("Keys pressed:", stdin)
default:
fmt.Println("Working..")
}
time.Sleep(time.Second)
}
Run Code Online (Sandbox Code Playgroud)
但我需要按下回车按钮这一事实是不可接受的。
有谁知道一种非阻塞的方法来捕获普通字母(不是 SIGINT)的按键,而无需事后按 Enter 键?