Golang-如何优雅的关闭一个Channel?
如何优雅的关闭Channel
这部分主要参考���:https://qcrao91.gitbook.io/go/channel/ru-he-you-ya-di-guan-bi-channel
()直接关闭存在的问题
主要就是上述“向已关闭的Channel收发,会如何?”中所提到的情况:
1、向已关闭的channel中发送数据,会panic
()2、重复关闭已经关闭的channel,会panic。
3、从已关闭的channel接收数据,收到的是0。
一个比较粗糙的实现
利用从读channel的,会返回bool的性质。
func IsClosed(ch select { case c := make(chan T) fmt.Println(IsClosed(c)) // false close(c) fmt.Println(IsClosed(c)) // true } rand.Seed(time.Now().UnixNano()) const Max = 100000 const NumSenders = 1000 dataCh := make(chan int, 100) stopCh := make(chan struct{}) // senders for i := 0; i
The End