首頁 >後端開發 >Golang >golang怎麼將通道關閉

golang怎麼將通道關閉

青灯夜游
青灯夜游原創
2023-01-11 11:12:232713瀏覽

在golang中,可以使用close()函數來關閉通道,語法「close(msg_chan)」。通道(chan)是一種系統資源,因此在不需要使用chan 時,需要使用內建函數close來手動關閉管道。注意如果向一個已經關閉的管道發送數據,那麼程式會pannic。

golang怎麼將通道關閉

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

Go 語言 中的 通道(chan) 也是一種系統資源,因此,當我們不需要使用 chan 時,我們需要手動關閉管道。關閉管道,需要使用系統內建的 close 函數。

close()是內建函數,並設定一個標識,表示不再有任何值會傳送到該通道。

close(msg_chan)
參數 說明
#msg_chan 需要關閉的管道。

您也可以使用for範圍循環關閉通道。在這裡,接收器goroutine可以藉助給定的語法檢查通道是打開還是關閉:

ele, ok:= <- Mychannel

在此,如果ok的值為true,則表示通道已打開,因此可以執行讀取操作。並且,如果的值為false,則表示該通道已關閉,因此將不執行讀取操作。

說明

  • 我們在使用 變數 接受管道回傳的資料後,第二個 bool 類型的回傳值表示管道是否關閉,如果為false,則表示管道已經關閉。

關閉通道的範例

//Go程序说明如何
//关闭使用的通道
//range循环和关闭函数
package main

import "fmt"

func myfun(mychnl chan string) {

    for v := 0; v < 4; v++ {
        mychnl <- "nhooo"
    }
    close(mychnl)
}

func main() {

    //创建通道
    c := make(chan string)

    // 使用 Goroutine
    go myfun(c)

    //当ok的值为为true时,表示通道已打开,可以发送或接收数据
    //当ok的值设置为false时,表示通道已关闭
    for {
        res, ok := <-c
        if ok == false {
            fmt.Println("通道关闭 ", ok)
            break
        }
        fmt.Println("通道打开 ", res, ok)
    }
}

golang怎麼將通道關閉

#向已經關閉的管道發送數據,程序會pannic

package main
import "fmt"
func main() {
	fmt.Println("嗨客网(www.haicoder.net)")
	ch := make(chan string, 5)
	ch <- "Hello"
	ch <- "HaiCoder"
	ch <- "Python"
	close(ch)
	ch <- "Close"
}

golang怎麼將通道關閉

關閉管道之後,我們再次使用關閉的管道發送了一條「Close」 訊息,運行程式後,我們看到程式pannic,即,關閉的管道不可以再次發送數據,否則,程式會pannic。

【相關推薦:Go影片教學程式設計教學

以上是golang怎麼將通道關閉的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn