在 Go 中,如果你需要处理执行时长较长的逻辑,并希望设置执行超时时间,可以使用 context 包来控制超时。以下是一个示例,展示如何为一个操作设置超时:
package main
import (
"context"
"fmt"
"time"
)
func main() {
// 设置 5 秒的超时时间
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel() // 确保超时取消被调用
resultCh := make(chan string)
// 模拟长时间的处理逻辑
go func() {
time.Sleep(6 * time.Second) // 模拟处理需要 6 秒
resultCh <- "任务完成"
}()
select {
case <-ctx.Done():
// 当超时或上下文取消时
fmt.Println("操作超时:", ctx.Err())
case result := <-resultCh:
// 如果在超时之前操作完成
fmt.Println(result)
}
}
在这个示例中,context.WithTimeout 创建了一个带有超时时间的上下文 ctx。我们通过 select 来等待两个情况:
- 如果超时到达,
ctx.Done()通道会被关闭,从而返回超时错误。 - 如果在超时之前操作完成,通道
resultCh会接收到结果。
这种方式可以在处理可能耗时较长的逻辑时,避免程序陷入死锁或无限等待的情况。
693

被折叠的 条评论
为什么被折叠?



