Go 语言中的超时处理

本文介绍了在Go语言中进行超时处理的方法,对比了与Java语言的不同。在Go语言中,通过使用select和time.After可以更简洁地实现超时控制,避免了手动处理超时时间和线程休眠。这种实现方式充分利用了Go语言的特性,展示了Go语言在处理并发和超时场景时的简洁与高效。
摘要由CSDN通过智能技术生成

最近在项目里用 Go 语言对一些微服务进行重构,由于 Go 对我来说仍然算是一种新语言,因此在项目过程中碰到的一些比较不同一些写法,将会以 Tips 的方式记录在这里。今天想记录的是 Go 语言里的超时处理。

超时在一些业务场景里非常普遍,例如:

– 数据库访问操作,进行网络连接时通常都有超时时间。
– 本地客户端用阻塞方式异步访问远程,等待一段时间之后,如果远程没有返回结果,则认为超时。
– 微服务在启动时,需要初始化某些数据,例如等待服务注册表返回的总线密码等等,如果在规定的时间内未获得需要的内容,则认为超时,服务启动失败。

在 Java 等传统语言里,通常会首先记录当前时间,然后使用一个无限循环进行资源等待检查,如果需要等待的资源无法获取到,则将当前线程休眠一段时间,当休眠恢复后检查时间是否超过规定时间,如果超时则抛出异常,否则继续进入循环进行等待。用伪代码表述如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

long startTime = Time.currentTimeMillis();

long EXPIRE = 1000*30; // 30 seconds to e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值