在Goroutine中使用os.stdin作为Reader是否可以?基本上我想要完成的是让用户在不阻塞主线程的情况下输入消息。
示例:
go func() {
for {
consolereader := bufio.NewReader(os.Stdin)
input, err := consolereader.ReadString('\n') // this will prompt the user for input
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println(input)
}
}()
答案 0 :(得分:1)
是的,这完全没问题。只要这是唯一与os.Stdin
交互的goroutine,一切都会正常运作。
顺便说一句,您可能想要使用bufio.Scanner
- 使用它比bufio.Reader
好一点:
go func() {
consolescanner := bufio.NewScanner(os.Stdin)
// by default, bufio.Scanner scans newline-separated lines
for consolescanner.Scan() {
input := consolescanner.Text()
fmt.Println(input)
}
// check once at the end to see if any errors
// were encountered (the Scan() method will
// return false as soon as an error is encountered)
if err := consolescanner.Err(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}()