MST

星途 面试题库

面试题:Go中如何在简单的父子协程间传递Context

请编写一段Go代码,展示如何在一个父协程创建子协程,并将Context从父协程传递到子协程,同时子协程能根据Context的取消信号来优雅地结束自身的工作。
18.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

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

func main() {
    ctx, cancel := context.WithCancel(context.Background())

    go child(ctx)

    time.Sleep(2 * time.Second)
    fmt.Println("父协程发起取消")
    cancel()

    time.Sleep(2 * time.Second)
}

func child(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("子协程收到取消信号,开始结束工作")
            return
        default:
            fmt.Println("子协程正在工作...")
            time.Sleep(1 * time.Second)
        }
    }
}