关闭Go通道不会在go例程中触发接收器

时间:2016-05-26 18:02:40

标签: go goroutine channels

package main

import "fmt"

func routine(doneCh <-chan struct{}) {
    for {
        select {
        case <-doneCh:
            fmt.Println("Routine done") // This never prints
            return
        }
    }
}

func main() {
    doneCh := make(chan struct{}, 1)

    go routine(doneCh)

    close(doneCh)
}

但是,如果我添加time.Sleep(1 * time.Second),则输出会打印出来。在程序退出之前关闭例程从doneCh接收的惯用方法是什么?

0 个答案:

没有答案