如果你想让go阻塞在某个地方或者某块代码阻塞在那里,那么一定是管道

184 阅读1分钟

1、信号管道,如果你调用waitForSignal,那么则会阻塞在那里

func waitForSignal() {
    sigs := make(chan os.Signal)
    signal.Notify(sigs, os.Interrupt)
    signal.Notify(sigs, syscall.SIGTERM)
    
    //你看,这里是读管道,管道中为信号,如果该管道没有信号,则会卡在这里;
    fmt.Println(<-sigs)
}

2、制造go context(也是管道)

参考:juejin.cn/post/684490…

3、普通的管道

chan + select

参考:juejin.cn/post/684490…