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(也是管道)
3、普通的管道
chan + select