ゴーラングーチンでゴルーチンを強制終了する方法
Go言語では、コンテキストを使用してゴルーチンを強制的に終了できます。コンテキストはリクエストのコンテキストを渡すために Go 言語で使用され、ゴルーチンのライフサイクルを制御するために使用できます。
最初に、context.Context オブジェクトを作成する必要があります。次に、実行する goroutine にこのオブジェクトを渡し、goroutine 内部の Done チャネルを監視します。context の Cancel メソッドが呼び出されたとき、または Done チャネルが閉じられたときに、goroutine はシグナルを受け取り、安全に終了できます。
サンプルコードを以下に示します。
package main
import (
"context"
"fmt"
"time"
)
func main() {
// 创建一个context对象
ctx, cancel := context.WithCancel(context.Background())
// 启动一个协程
go func() {
for {
select {
case <-ctx.Done():
// 收到关闭信号,安全退出协程
fmt.Println("Goroutine canceled")
return
default:
// 执行协程的任务
fmt.Println("Goroutine running")
time.Sleep(time.Second)
}
}
}()
// 等待一段时间后关闭协程
time.Sleep(3 * time.Second)
cancel()
fmt.Println("Canceled goroutine")
// 等待一段时间,以便观察协程是否已经退出
time.Sleep(3 * time.Second)
fmt.Println("Program exited")
}
上記のサンプルでは、contextオブジェクトのctxとcancel関数を作成しました。そして、goキーワードを利用してゴルーチンを起動し、ゴルーチンの内部でctx.Done()チャネルを監視します。cancel()関数を呼び出すと、ctx.Done()チャネルは閉じられ、ゴルーチンはシグナルを受信後に安全に終了します。
日本語のネイティブとしてこの文章を言い換え、1つのオプションのみ必要です。
Goroutine running
Goroutine running
Goroutine running
Goroutine canceled
Canceled goroutine
Program exited
キャンセル関数呼び出し後に、コルーチンは終了シグナルを受信して正常に終了することがわかります。