context.WithCancelは
、2つの関連オブジェクトを返すCTXとキャンセル、ヌル構造体CTXを送信する呼び出しをキャンセルする、CTXは一度実行ゴルーチンを終了するオブジェクトを受信するステップと、
CTXは、スレッドセーフである、それは同時に複数に送信することができますゴルーチン、キャンセルトリガ、すべてのゴルーチンの実行をキャンセル
パッケージメイン インポート( " コンテキスト" " FMT " " 時間" ) testContext FUNC(){ CTX、キャンセル: = context.WithCancel(context.Background()) D1(CTX)が行く D2(CTX)行く time.Sleep(7 * time.Second)は ()キャンセル } FUNCさd1(CTX context.Context){ た:i = 0 のために{ time.Sleep(1 * time.Second) iは ++ 選択{ ケース < -ctx.Done(): fmt.Println(" オーバーD1 " ) 戻り デフォルト: fmt.Println(" D1 " 、I) } } } FUNCさd2(CTX context.Context){ fmt.Println(" 開始d2は" ) < - ctx.Done() fmt.Println(" D2オーバー" ) } FUNCのmain(){ testContext() fmt.Println(" 主オーバー" ) }
輸出
開始d2は D1 1 、D1 2 D1 3 D1 4 D1 5 D1 6 メイン上