Golang 如何关闭一个通道

Golang 如何关闭一个通道

在Golang中,我们可以通过 close() 函数来关闭一个 通道 。一旦一个通道被关闭,我们就不能向它发送数据,尽管我们仍然可以从它那里读取数据。一个关闭的通道表示我们想表明这个通道的工作已经完成,没有必要再打开。

当我们用 make 关键字声明一个通道时,我们就打开了这个通道。

ch := make(chan int)
Go

例子1

让我们考虑一个非常简单的例子,在这个例子中,我们将创建一个缓冲通道,然后向其传递数据,然后关闭该通道。

考虑一下下面的代码。

package main

import "fmt"

func main() {
   ch := make(chan int, 3)

   ch <- 2
   ch <- 3

   close(ch)
   fmt.Println("Channel closed!")
}
Go

输出

如果我们在上述代码上运行命令 go run main.go ,那么我们将在终端得到以下输出。

Channel closed!
Go

例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

输出

如果我们在上述代码上运行命令 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
Go

例三

尽管我们不能向一个封闭的通道发送数据,但我们仍然可以从一个封闭的通道读取数据。请看下面的代码。

package main

import "fmt"

func main() {
   ch := make(chan int, 3)

   ch <- 2
   ch <- 3

   close(ch)

   <-ch
   fmt.Println("Channel closed!")
}
Go

输出

如果我们在上述代码上运行命令 go run main.go ,那么我们将在终端得到以下输出。

Channel closed!
Go

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册