如何在 Golang 中关闭通道?
go programmingserver side programmingprogramming更新于 2025/4/10 17:52:17
我们可以在 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("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!