关闭channel
您可以使用close(chan)关闭通道。
关闭通道的主要目的是为了通知工作者协程它们的工作已经完成了,它们可以退出了。
这可以确保您不会泄漏协程。
关闭通道使迭代它的range循环结束:
range循环结束:package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan string)
go func() {
for s := range ch {
fmt.Printf("received from channel: %s\n", s)
}
fmt.Print("range loop finished because ch was closed\n")
}()
ch <- "foo"
close(ch)
time.Sleep(1 * time.Second) // 花1秒钟等待协程执行完毕
}
------------Output------------
received from channel: foo
range loop finished because ch was closed从已关闭的通道中接收数据会立即返回零值:
在接收时还可以检测通道是否已关闭:
多次关闭通道会引发恐慌:
向已关闭的通道放数据也会引发恐慌:
最后更新于
这有帮助吗?