go三种超时退出方法

Golang实现 超时退出 有哪三种方式,你知道吗?

MySQL大牛
带你全面剖析与系统梳理数据库(mysql等)知识分享,总结数据库技巧和方法,提升你的技术技能。
45篇原创内容

学习与交流:Go语言技术微信群

商务合作加微信:LetsFeng

 

现在就开始你的Go语言学习之旅吧!人生苦短,let’s Go.


图片

图片

Goland 全家桶最新正式版激活码,支持版本升级

https://web.52shizhan.cn/activity/jump/link

在Go语言中,实现超时退出通常涉及到使用 context 包。context 包提供了一种在不同 Goroutine 之间传递取消信号的方式,以及设置超时。

以下是三种常见的实现超时退出的方式:

使用time.Afterselect

package main

import (
"fmt"
"time"
)

func main() {
timeout := 5 * time.Second
done := make(chan bool)

go func() {
    // 模拟耗时操作
    time.Sleep(2 * time.Second)
    done <- true
}()

select {
case <-done:
    fmt.Println("Task completed successfully.")
case <-time.After(timeout):
    fmt.Println("Timeout! The operation took too long.")
}
}

使用time.Afterchan

package main

import (
"fmt"
"time"
)

func main() {
timeout := 5 * time.Second
done := make(chan bool)

go func() {
    // 模拟耗时操作
    time.Sleep(2 * time.Second)
    done <- true
}()

select {
case <-done:
    fmt.Println("Task completed successfully.")
case <-time.After(timeout):
    fmt.Println("Timeout! The operation took too long.")
}
}

使用context.WithTimeout

package main

import (
"context"
"fmt"
"time"
)

func main() {
timeout := 5 * time.Second
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()

done := make(chan bool)

go func() {
    // 模拟耗时操作
    time.Sleep(2 * time.Second)
    done <- true
}()

select {
case <-done:
    fmt.Println("Task completed successfully.")
case <-ctx.Done():
    fmt.Println("Timeout! The operation took too long.")
}
}

在这些例子中,我们使用了time.Afterselect或者使用context.WithTimeout来实现超时退出。

第一种方式中,time.After会在指定时间后向通道发送一个时间值,select用于监听多个通道的操作。

第二种方式中,使用了context.WithTimeout创建了一个带有超时的上下文,当操作耗时超过指定时间时,ctx.Done()通道会被关闭。

 

文章首发:

 

 

 

 

 

 

更多相关Go语言的技术文章或视频教程,请关注本公众号获取并查看,感谢你的支持与信任!

 

收录于合集 #学Go语言哪些事儿
 241
上一篇在docker里如何安装和部署golang下一篇Go语言实现开发一个简单的gRPC Demo,我该如何去开始?
阅读 1470
Go语言圈
 
 
 
 
 
 
posted @   技术颜良  阅读(184)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2022-12-01 Go实现整合 Logrus 输出json格式日志
2022-12-01 golang流式编程(可选参数)
2021-12-01 你管这破玩意叫 IO 多路复用
2021-12-01 ensp 模拟 calico 跨网段 bgp 网络
2020-12-01 prometheus各种插件下载
2017-12-01 redis 一主二从三哨兵
点击右上角即可分享
微信分享提示