面试题答案
一键面试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)
}
}
}