[管道]
分为 有缓冲和无缓冲两种
无缓冲:
1)接受者与发送者必然存在于两个协程, 否则会造成互相等待 死锁的情况
顺序执行多协程:
var ch1 = make(chan int)
var stopFlag = make(chan bool)
// 保证两个协程顺序执行
go func() {
fmt.Println("g1")
time.Sleep(3 * time.Second)
ch1 <- 1
}()
go func() {
<-ch1
fmt.Println("g2")
time.Sleep(1 * time.Second)
stopFlag <- true
}()
<-stopFlag
fmt.Println("over")
有缓冲:
1.允许同一个协程中, 顺序执行, 但是保证发送的数量与接收的数量相等,否则会造成死锁
[协程]
实例:
go funct(){
...
}()
实现主进程Hold的方式
1)使用无缓冲的channel, 异常情况下实现终止操作,例如gin框架保证服务的异常中断之后的处理
2)使用select{} 即可