Go では、パイプラインを閉じると暗黙的な値 nil が送信され、それ以降の送信が失敗したことを示します。パイプライン操作をキャンセルする場合は、context.WithCancel() を使用してキャンセル関数を持つコンテキストを作成し、cancel() 関数を呼び出してキャンセルします。操作により、パイプライン操作が終了します。
Go 言語でのパイプラインの終了とパイプライン操作のキャンセル パイプラインは、Go 言語での同時プログラミングのための重要なツールです。パイプのクローズ機能とキャンセル機能を理解し、正しく使用することが重要です。 パイプの閉鎖必要なデータをすべてパイプに送信した後、close(ch)
関数を呼び出してパイプを閉じることができます。これにより、暗黙的な値 nil
がパイプに送信され、後続の送信が失敗することが示されます。 package main import "fmt" func main() { ch := make(chan int) go func() { // 发送一些值 ch <- 1 ch <- 2 // 关闭管道 close(ch) }() // 接收管道中的值 for v := range ch { fmt.Println(v) } // Pipline 已经关闭,接收操作将会退出并打印 "<nil>" fmt.Println(<-ch) }
close(ch)
函数关闭管道。这会向管道发送一个隐式值 nil
,表示后续发送都会失败。package main import ( "context" "fmt" ) func main() { ctx, cancel := context.WithCancel(context.Background()) ch := make(chan int) go func() { // 发送一些值 for i := 0; i < 5; i++ { select { case <-ctx.Done(): return case ch <- i: } } }() // 取消管道操作 cancel() // 接收管道中的值 for v := range ch { fmt.Println(v) } }
在某些情况下,可能需要取消管道操作,而无需等待所有数据都被发送和接收。可以使用 context.WithCancel()
函数创建带有取消功能的上下文。
在上面的示例中,调用 cancel()
パイプ操作のキャンセル
context.WithCancel()
関数を使用して作成できます。 🎜rrreee🎜 上記の例では、cancel()
関数を呼び出すとコンテキストがキャンセルされ、パイプライン操作が終了します。進行中のすべての操作でキャンセルが正しく処理されるようにするには、パイプラインをそのパイプライン上で動作するコルーチンと同期する必要があることに注意してください。 🎜以上がGo 言語でパイプラインを使用してパイプライン操作を終了およびキャンセルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。