下面是 Go 编程书中的示例代码。我不明白为什么 close 需要是它自己的 goroutine。我试图靠近主,但它崩溃了。有人可以解释为什么更接近的需要在一个单独的 goroutine 中?
谢谢!
func makeThumbnails(filenames <-chan string, result chan<- int64) int64 {
sizes := make(chan int64)
var wg sync.WaitGroup
for f := range filenames {
wg.Add(1)
go func(f string) {
defer wg.Done()
sizes <- int64(len(f))
}(f)
}
// **closer**, why this guy needs to be in a goroutine???
go func() {
wg.Wait()
close(sizes)
}()
var total int64
for size := range sizes {
total += size
}
result <- total
return total
}
largeQ
相关分类