前言
goroutine
Timer
Time.After(d Duration)
output:
2021-10-27 23:06:04.304596 +0800 CST m=+0.000085653
2021-10-27 23:06:07.306311 +0800 CST m=+3.001711390
time.After()ChannelChannel
有了这个特性就可以实现一些异步控制超时的场景:
goroutinechannelgoroutinegoroutine
output:
do something...
timeout
timer.After 取消,同时 Channel 发出消息,也可以关闭通道等通知方式。
注意 Channel 最好是有大小,防止阻塞 goroutine ,导致泄露。
Context
第二种方案是利用 context,go 的 context 功能强大;
context.WithTimeout()
contextDone()channelchannel
timout context deadline exceeded
timeout.Err()context
goroutine 传递 context
context
goroutinecontextcontext
cancelFunc()
Gin 中的案例
Shutdown(ctx)context
Gin
总结
因为写 go 的时间不长,所以自己写了一个练手的项目:一个接口压力测试工具。
go