如何在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!
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP