如何在Go语言中关闭通道?
我们可以使用 **close()** 函数在Go语言中关闭**通道**。通道关闭后,我们无法向其发送数据,但仍然可以从中读取数据。关闭的通道表示该通道上的工作已完成,无需保持打开状态。
我们在使用 **make** 关键字声明通道时打开它。
ch := make(chan int)
示例1
让我们考虑一个非常简单的例子,在这个例子中,我们将创建一个缓冲通道,然后向其传递数据,然后关闭通道。
请看下面的代码。
package main import "fmt" func main() { ch := make(chan int, 3) ch <- 2 ch <- 3 close(ch) fmt.Println("Channel closed!") }
输出
如果我们在上述代码上运行命令 **go run main.go**,那么我们将在终端中得到以下输出。
Channel closed!
示例2
需要注意的是,如果我们试图在通道关闭后向其发送一些值,那么我们将得到一个 **panic**。
请看下面的代码。
package main import "fmt" func main() { ch := make(chan int, 3) ch <- 2 ch <- 3 close(ch) ch <- 5 fmt.Println("Channel closed!") }
输出
如果我们在上述代码上运行命令 **go run main.go**,那么我们将在终端中得到以下输出。
panic: send on closed channel goroutine 1 [running]: main.main() /home/cg/root/2773125/main.go:13 +0xd4 exit status 2
示例3
尽管我们不能向已关闭的通道发送数据,但我们仍然可以从已关闭的通道读取数据。请看下面的代码。
package main import "fmt" func main() { ch := make(chan int, 3) ch <- 2 ch <- 3 close(ch) <-ch fmt.Println("Channel closed!") }
输出
如果我们在上述代码上运行命令 **go run main.go**,那么我们将在终端中得到以下输出。
Channel closed!
广告