如何关闭 Golang 中的频道?
我们可以借助该函数关闭Golang中的通道close()。一旦通道关闭,我们就不能向它发送数据,尽管我们仍然可以从中读取数据。关闭的通道表示我们想要显示该通道上的工作已经完成的情况,并且不需要将其打开。
我们在使用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("频道关闭!") }输出结果
如果我们在上面的代码上运行gorunmain.go命令,那么我们将在终端中得到以下输出。
频道关闭!
示例2
应该注意的是,如果我们在通道关闭后尝试向通道发送一些值,那么我们将得到一个panic。
考虑下面显示的代码。
package main import "fmt" func main() { ch := make(chan int, 3) ch <- 2 ch <- 3 close(ch) ch <- 5 fmt.Println("频道关闭!") }输出结果
如果我们在上面的代码上运行gorunmain.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("频道关闭!") }输出结果
如果我们在上面的代码上运行gorunmain.go命令,那么我们将在终端中得到以下输出。
频道关闭!