请问大家这里如何打印出“End. [sender]”

20次阅读

共计 156 个字符,预计需要花费 1 分钟才能阅读完成。

大家好,这是我的代码:

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("接收到  %dn", e)
        sum += e
        if sum > 3 {fmt.Println(sum)
            break
        }
    }

    fmt.Println("End [REC]")

    // <-synChan}

这是《GO 并发编程》里讲通道的一个题目,但是我试了几个方法之后会成死锁,请问大家如何打印出这个 fmt.Println("End [SEND]")。这里为什么不能打印出来?我想过是 main 函数退出了,所以试着使用通道阻塞,但直接会出死锁。。。

正文完
 0