获得最快的goroutine

  • 本文关键字:goroutine go
  • 更新时间 :
  • 英文 :


如何只获得最快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不再使用时,它将被垃圾收集

最新更新