1 回答
TA贡献1884条经验 获得超4个赞
一般来说,Go 中没有非阻塞 IO API 的概念。你可以通过使用 goroutines 来完成同样的事情。
这是一个关于Play的例子, stdin 是模拟的,因为 play 不允许它。
package main
import "fmt"
import "time"
func main() {
ch := make(chan string)
go func(ch chan string) {
/* Uncomment this block to actually read from stdin
reader := bufio.NewReader(os.Stdin)
for {
s, err := reader.ReadString('\n')
if err != nil { // Maybe log non io.EOF errors, if you want
close(ch)
return
}
ch <- s
}
*/
// Simulating stdin
ch <- "A line of text"
close(ch)
}(ch)
stdinloop:
for {
select {
case stdin, ok := <-ch:
if !ok {
break stdinloop
} else {
fmt.Println("Read input from stdin:", stdin)
}
case <-time.After(1 * time.Second):
// Do something when there is nothing read from stdin
}
}
fmt.Println("Done, stdin must be closed")
}
- 1 回答
- 0 关注
- 266 浏览
添加回答
举报