如何在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!
廣告