golangでゴルーチンを強制終了させる方法は?

Go言語ではContext.Contextを使ってGoroutineを強制終了できます。

context.Contextは、Go言語でコンテキスト情報を伝達するための標準ライブラリです。これは、協調ルーチン(ゴルーチン)のライフサイクルを制御するために使用でき、ゴルーチンをキャンセルすることもできます。

以下は、context.Contextを使用してゴルーチンをキャンセルするコードの例です。

package main

import (
	"context"
	"fmt"
	"time"
)

func main() {
	// 创建一个空的context
	ctx := context.TODO()

	// 启动一个协程
	go worker(ctx)

	// 等待一段时间
	time.Sleep(2 * time.Second)

	// 取消协程
	cancelCtx, cancel := context.WithCancel(ctx)
	cancel()

	// 等待协程退出
	time.Sleep(1 * time.Second)
}

func worker(ctx context.Context) {
	for {
		select {
		case <-ctx.Done():
			fmt.Println("worker canceled")
			return
		default:
			// 在这里执行具体的逻辑
			fmt.Println("working...")
			time.Sleep(500 * time.Millisecond)
		}
	}
}

上記のコードでは,最初に空のコンテキストが作成され,次に,キャンセルシグナルが受信されたときに終了するコルーチンが開始されています。

main関数では、2秒待機後にcontext.WithCancelを呼び出してキャンセル機能付きのcontextを作成し、cancel関数を呼び出してゴルーチンをキャンセル。最後にゴルーチンが終了するのを待つ。

コードを実行すると、コルーチンがキャンセル信号を受け取ると終了し、「worker canceled」と表示されます。

bannerAds