假设你有这样的结构:
ch := make(chan string)
errCh := make(chan error)
go func() {
line, _, err := bufio.NewReader(r).ReadLine()
if err != nil {
errCh <- err
} else {
ch <- string(line)
}
}()
select {
case err := <-errCh:
return "", err
case line := <-ch:
return line, nil
case <-time.After(5 * time.Second):
return "", TimeoutError
}
在 5 秒超时的情况下,goroutine 会挂起,直到 ReadLine 返回,这可能永远不会发生。我的项目是一个长期运行的服务器,所以我不想要卡住的 goroutines 的积累。
Smart猫小萌
相关分类