ゴーラングーチンでゴルーチンを強制終了する方法

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

キャンセル関数呼び出し後に、コルーチンは終了シグナルを受信して正常に終了することがわかります。

bannerAds