参考答案
结论:Go中goroutine生命周期需由自身通过channel或context主动退出,不可强杀。核心要点:1. channel用于goroutine间通信和同步,可定义done chan struct{}发送关闭信号,接收方select监听后return;2. context提供标准取消机制,Context.Done()返回只读chan,调用cancel()广播取消,适合多级派生goroutine树;3. 对比:channel灵活但需手动传递,context统一了超时、截止和父子取消。示例:ctx,cancel:=context.WithCancel(context.Background());go func(){for{select{case<-ctx.Done():return}}}();cancel()。