如何只获得最快goroutine的结果。例如,让我们有这个函数。
func Add(num int)int{
return num+5
}
我们有这个功能。
func compute(){
for i := 0; i < 5; i++ {
go Add(i)
}
}
我想得到第一场比赛的结果。
使用buffered channel
获得多次灌浆执行的第一个结果
func Test(t *testing.T) {
ch := make(chan int, 1)
go func() {
for i := 0; i < 5; i++ {
go func(c chan<- int, i int) {
res := Add(i)
c <- res
}(ch, i)
}
}()
res := <-ch // blocking here, before get first result
//close(ch) - writing to close channel produce a panic
fmt.Println(res)
}
游乐场
保持channel
打开并且从不关闭它时,它没有内存泄漏。当channel
不再使用时,它将被垃圾收集