[解決済み] ゴルーチンの停止方法
2022-07-08 20:42:39
質問
メソッドを呼び出し、戻り値をチャネルで渡すゴルーチンがあります。
ch := make(chan int, 100)
go func(){
for {
ch <- do_stuff()
}
}()
このようなゴルーチンを停止するにはどうしたらよいでしょうか?
どのように解決するのですか?
EDITです。 あなたの質問がゴルーチン内のちゃんねるに値を送信することであることを理解する前に、私は急いでこの答えを書き上げました。 以下のアプローチは、上で提案したように追加のちゃんねるを使用するか、すでに持っているちゃんねるが双方向であることを利用して、1つだけを使用することができます...
もしあなたのゴルーチンがちゃんねるから出る項目を処理するためだけに存在するならば、"close" 組み込み関数とチャンネル用の特別な受信フォームを利用することができます。
つまり、ちゃんねるでアイテムの送信が終わったら、ちゃんねるを閉じます。 そして、goroutine 内で、チャンネルが閉じられたかどうかを示す receive 演算子の追加パラメータを取得します。
以下は完全な例です(waitgroupは、ゴルーチンが完了するまでプロセスが継続することを確認するために使用されます)。
package main
import "sync"
func main() {
var wg sync.WaitGroup
wg.Add(1)
ch := make(chan int)
go func() {
for {
foo, ok := <- ch
if !ok {
println("done")
wg.Done()
return
}
println(foo)
}
}()
ch <- 1
ch <- 2
ch <- 3
close(ch)
wg.Wait()
}
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン