dming / lodos

lodos
Apache License 2.0
0 stars 0 forks source link

Go Goroutine 不能从外部杀死 #4

Open dming opened 6 years ago

dming commented 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 }