Golang-如何优雅的关闭一个Channel?

小明 2025-05-01 14:54:08 7

如何优雅的关闭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
微信