golang 函数超时处理
func WithTimeout(dur time.Duration, fn func() error) error {
var ch = make(chan error, 1)
go time.AfterFunc(dur, func() {
ch <- errors.New("函数执行超时: " + pkg.Caller.FromFunc(reflect.ValueOf(fn)))
})
go func() {
defer func() {
if err := recover(); err != nil {
switch err.(type) {
case error:
ch <- err.(error)
default:
log.Fatalln(err)
}
}
}()
ch <- fn()
}()
return <-ch
}
作者:百里求一
出处:http://www.cnblogs.com/bergus/
我的语雀: https://www.yuque.com/barry.bai
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号