下面的代码实现了golang中请求超时退出的机制:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| func DoSomething () {
done := make (chan error )
go func () {
done <- DoThing ()
}()
select {
case <-time. After(time. Second*10):
Close ()//中止DoThing()的执行,比如关闭网络连接
return fmt. Errorf("Timeout")
case err := <-done :
if err != nil {
err = fmt. Errorf("call failed, err %v", err )
}
return err
}
} |