Golang os.stdin作为Goroutines的读者

时间:2015-11-17 20:21:46

标签: go buffer stdin goroutine reader

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

1 个答案:

答案 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)
    }
}()