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("Channel closed!")
}
输出
如果我们在上述代码上运行命令 go run main.go ,那么我们将在终端得到以下输出。
Channel closed!
例2
应该注意的是,如果我们试图在通道关闭后向其发送一些值,那么我们将得到一个 恐慌。
请看下面的代码。
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
例三
尽管我们不能向一个封闭的通道发送数据,但我们仍然可以从一个封闭的通道读取数据。请看下面的代码。
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!
极客教程