等待上sync.Waitgroup我有下面的代碼從下面的goroutine信道發送時進入僵局:在延遲
package main
import (
"fmt"
"sync"
)
func main() {
for a := range getCh(10) {
fmt.Println("Got:", a)
}
}
func getCh(n int) <-chan int {
var wg sync.WaitGroup
ch := make(chan int)
defer func() {
fmt.Println("closing")
wg.Wait()
close(ch)
}()
wg.Add(1)
go func() {
defer wg.Done()
for i := 0; i < n; i++ {
ch <- i
}
}()
wg.Add(1)
go func() {
defer wg.Done()
for i := n; i < 0; i-- {
ch <- i
}
}()
return ch
}
我知道,這是合法的defer
使用wg.Wait()
。但是我一直無法在通道作爲返回值的函數中找到用處。
完美。非常感謝。 – abhink
另一種我大量使用自己的方法:https://play.golang.org/p/RjsB3-EOQI。這使用了一個「更接近」的程序來阻塞和關閉,而不是像你期望的延遲函數一樣工作,但是是一個單獨的goroutine。 – Kaedys