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

更新於:2021年11月1日

3K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告