Go 并发编程全面解析
1. nil 通道
nil 通道总是会阻塞。当你确实需要这种阻塞行为时,可以使用 nil 通道。以下是示例代码:
package main
import (
"fmt"
"math/rand"
"sync"
"time"
)
var wg sync.WaitGroup
func add(c chan int) {
sum := 0
t := time.NewTimer(time.Second)
for {
select {
case input := <-c:
sum = sum + input
case <-t.C:
c = nil
fmt.Println(sum)
wg.Done()
}
}
}
func send(c chan int) {
for {
c <- rand.Intn(10)
}
}
func main() {
c := make(chan int)
rand.Seed(time.Now().Unix())
wg.Add(1)
go add(c)
go send(c)
wg.Wait()
}
运行 nilChannel.go 会得到类似如下的输出:
$ go run nilChannel
超级会员免费看
订阅专栏 解锁全文
1171

被折叠的 条评论
为什么被折叠?



