大家好,这是我的代码:
func main () {
// synChan := make(chan struct{}, 1)
intChan := make(chan int, 1)
ticker := time.NewTicker(time.Second)
go func() {
for range ticker.C {
select {
case intChan <- 1:
case intChan <- 2:
case intChan <- 3:
}
}
// synChan<- struct{}{}
fmt.Println("End [SEND]")
}()
var sum int
for e := range intChan {
fmt.Printf("接收到 %d\n", e)
sum += e
if sum > 3 {
fmt.Println(sum)
ticker.Stop()
break
}
}
fmt.Println("End [REC]")
// <-synChan
}
这是《GO并发编程》里讲通道的一个题目,但是我试了几个方法之后会成死锁,请问大家如何打印出这个`fmt.Println("End [SEND]")`。这里为什么不能打印出来?我想过是`main`函数退出了,所以试着使用通道阻塞,但直接会出死锁。。。
有疑问加站长微信联系(非本文作者)