大家好,这是我的代码:
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)
break
}
}
fmt.Println("End [REC]")
// <-synChan
}
这是《 GO 并发编程》里讲通道的一个题目,但是我试了几个方法之后会成死锁,请问大家如何打印出这个 fmt.Println("End [SEND]")。这里为什么不能打印出来?我想过是 main 函数退出了,所以试着使用通道阻塞,但直接会出死锁。。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.