面试题答案
一键面试在Go语言中,可以使用context.Context
来实现一个简单的通知退出机制。以下是一个示例:
- 使用
context.Context
实现退出机制
package main
import (
"context"
"fmt"
"time"
)
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("收到退出信号,安全退出")
return
default:
fmt.Println("工作中...")
time.Sleep(1 * time.Second)
}
}
}
- 主函数调用
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// 模拟5秒后发送退出信号
time.Sleep(5 * time.Second)
cancel()
// 等待goroutine退出
time.Sleep(2 * time.Second)
}
在上述代码中:
context.WithCancel
创建了一个可取消的context.Context
。cancel
函数用于发送取消信号。- 在
worker
函数中,通过select
语句监听ctx.Done()
通道。当该通道接收到数据时,意味着收到了退出信号,此时函数安全退出。 - 在
main
函数中,启动worker
goroutine,5秒后调用cancel
函数发送退出信号,之后再等待2秒确保worker
goroutine有足够时间退出。