Open dming opened 6 years ago
golang的goroutine,或者说go的所有函数,都只能在内部用return结束,不能在外部显式的结束go的函数。
对于一些对时间不敏感的函数,我们需要对其进行设定一个时间,timeout了以后就不管函数进行到哪里,都结束掉这个函数。那么可以参考一下这样的结构体:
func myFunc() (result []reflect.Value, success bool) { fn := reflect.Value{} in := make([]reflect.Value, 1) out_chan := make(chan []reflect.Value) _func := func() { out_chan <- fn.Call(in) } go _func()
select { case _out := <-out_chan: return _out, true case <-time.After(time.Second * 2): return nil, false }
}
PS:下面这段代码为原来的函数 func myFunc() (result []reflect.Value, success bool) { fn := reflect.Value{} in := make([]reflect.Value, 1) return fn.Call(in), true }
golang的goroutine,或者说go的所有函数,都只能在内部用return结束,不能在外部显式的结束go的函数。
对于一些对时间不敏感的函数,我们需要对其进行设定一个时间,timeout了以后就不管函数进行到哪里,都结束掉这个函数。那么可以参考一下这样的结构体:
func myFunc() (result []reflect.Value, success bool) { fn := reflect.Value{} in := make([]reflect.Value, 1) out_chan := make(chan []reflect.Value) _func := func() { out_chan <- fn.Call(in) } go _func()
}
PS:下面这段代码为原来的函数 func myFunc() (result []reflect.Value, success bool) { fn := reflect.Value{} in := make([]reflect.Value, 1) return fn.Call(in), true }