ホームページ  >  記事  >  バックエンド開発  >  golangでチャンネルを閉じる方法

golangでチャンネルを閉じる方法

青灯夜游
青灯夜游オリジナル
2023-01-11 11:12:232664ブラウズ

golang では、close() 関数を使用してチャネルを閉じることができます。構文は「close(msg_chan)」です。チャネル (chan) はシステム リソースであるため、chan を使用する必要がない場合は、組み込み関数 close を使用して手動でパイプを閉じる必要があります。注: 閉じたパイプにデータを送信すると、プログラムがパニックになります。

golangでチャンネルを閉じる方法

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

Go 言語のチャネル (chan) もシステムリソースなので、chan を使用する必要がない場合は手動でパイプを閉じる必要があります。パイプを閉じるには、システムの組み込みの閉じる関数を使用する必要があります。

close() は組み込み関数であり、これ以上値がチャネルに送信されないことを示すフラグを設定します。

close(msg_chan)
#パラメータ説明##msg_chanfor range ループを使用してチャネルを閉じることもできます。ここで、受信側のゴルーチンは、指定された構文を使用してチャネルが開いているか閉じているかを確認できます。
ele, ok:= <- Mychannel
パイプを閉じる必要があります。
ここで、ok の値が true の場合、チャネルが開いていることを意味し、したがって読み取りが行われます。という操作が可能です。の値が false の場合、チャネルが閉じられていることを意味するため、読み取り操作は実行されません。

説明

変数を使用してパイプラインから返されたデータを受け取った後、2 番目の 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)
    }
}

データを閉じたパイプに送信すると、プログラムはpannicgolangでチャンネルを閉じる方法

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"
}

パイプを閉じた後、閉じたパイプを再度使用して「Close」メッセージを送信しました。プログラムを実行した後、プログラムがパニックを起こしました。である場合、閉じられたパイプはデータを再度送信できません。そうでない場合、プログラムはパニックを起こします。

golangでチャンネルを閉じる方法【関連する推奨事項:

Go ビデオ チュートリアル

プログラミング教育

以上がgolangでチャンネルを閉じる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。