Golang os.stdin 作为 Goroutines 中的 Reader

Golang os.stdin as a Reader in Goroutines

可以在 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)
    }
}()

是的,这非常好。只要这是唯一与 os.Stdin 交互的 goroutine,一切都会正常工作。

顺便说一下,您可能想使用 bufio.Scanner - it's a bit nicer to work with than 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)
    }
}()