go语言time.After()的作用

news/2024/11/14 23:50:12/

time.After是一个非常实用的函数,它返回一个用于读取的单向通道(<-chan time.Time),这个通道会在指定的时间间隔之后发送当前时间。这个机制常被用于实现超时控制、延迟执行等场景。

应用场景:

1.延迟执行、定时任务

package mainimport ("fmt""time"
)func main() {// 等待3秒timer := time.After(3 * time.Second)// 阻塞等待time.After的通道发送时间x := <-timerfmt.Println(x)// 当上面的<-timer执行后,说明已经等待了5秒fmt.Println("3秒已过")// 你可以继续执行你的逻辑...
}

2.超时控制

time.After还常用于实现超时控制。比如,你可能在发送一个HTTP请求时,不希望这个请求无限制地等待响应,而是想在某个超时时间后停止等待并处理超时逻辑:

超时控制应该是非常常见的使用场景。

package mainimport ("fmt""io/ioutil""net/http""time"
)func main() {client := &http.Client{Timeout: 10 * time.Second, // 设置客户端超时时间}// 模拟一个可能会超时的请求resp, err := client.Get("http://example.com/may-timeout")if err != nil {fmt.Println("请求错误:", err)return}defer resp.Body.Close()// 使用time.After实现读取响应体的超时done := make(chan bool, 1)go func() {// 模拟读取响应体,实际中可能是ioutil.ReadAll(resp.Body)// 这里用time.Sleep模拟耗时操作time.Sleep(2 * time.Second)done <- true}()select {case <-done:// 读取成功body, _ := ioutil.ReadAll(resp.Body)fmt.Println("读取响应体成功:", string(body))case <-time.After(1 * time.Second):// 超时fmt.Println("读取响应体超时")}
}

超时控制channel结合了select。

3.time.Sleep和time.After的差异

time.Sleep和time.After什么区别?

time.Sleep 较为简单直接。

time.After 返回通道(channel),读取通道时阻塞来实现。


http://www.ppmy.cn/news/1500048.html

相关文章

Linux中的System V通信标准--共享内存、消息队列以及信号量

关于 System V 标准&#xff0c;一共有三种通信方式&#xff0c;分别为&#xff1a;共享内存、信号量和消息队列三种通信方式。本篇将较为详细的讲解三种通信方式的实现原理&#xff0c;以及介绍在 Linux 系统下调用这三种的通信方式的接口&#xff0c;其中以共享内存为例&…

聚观早报 | Meta将推出新款AR眼镜;iPhone SE 4将升级显示屏

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 7月24日消息 Meta将推出新款AR眼镜 iPhone SE 4将升级显示屏 华硕天选Air 2024开启预约 巴菲特再次减持比亚迪股…

VMware三种网络模式---巨细

文章目录 目录 ‘一.网络模式概述 二.桥接模式 二.NAT模式 三.仅主机模式 四.案例演示 防火墙配置&#xff1a; 虚拟电脑配置 前言 本文主要介绍VMware的三种网络模式 ‘一.网络模式概述 VMware中分为三种网络模式&#xff1a; 桥接模式&#xff1a;默认与宿主机VMnet0绑…

构建安全的单点登录(SSO)系统:PHP框架实现指南

引言 单点登录&#xff08;SSO&#xff09;是一种允许用户使用单一身份验证来访问多个相关但独立的系统或应用程序的技术。在企业环境中&#xff0c;SSO可以极大地提高效率&#xff0c;减少密码管理的复杂性&#xff0c;并增强安全性。本文将详细介绍如何在PHP框架中实现SSO&a…

软件测试---测试需求分析

课程目标 什么是软件测试需求 软件测试需求的必要性 如何对软件测试需求进行分析&#xff08;重点&#xff09; 课程补充 灰度测试&#xff08;基于功能&#xff09;&#xff1a;先发布部分功能&#xff0c;然后看用户的反馈&#xff0c;再去发布另外一部分的功能更新。 A/B测…

文心一言大模型

文心一言是百度基于其强大的“文心”大模型技术推出的生成式AI产品&#xff08;英文名&#xff1a;ERNIE Bot&#xff09;。以下是关于文心一言的详细介绍&#xff1a; 一、产品定位与功能 定位&#xff1a;文心一言被定位为人工智能基座型的赋能平台&#xff0c;旨在助力金融…

java项目数据库 mysql 迁移到 达梦

目录 一、下载安装达梦数据库 1、下载 2、解压 3、安装 二、迁移 三、更改SpringBoot 的 yml文件 1、达梦创建用户 2、修改yml 一、下载安装达梦数据库 1、下载 下载地址 https://eco.dameng.com/download/ 点击下载 开发版 (X86平台) , 然后选择操作系统并点击立…

密码学原理精解【8】

文章目录 概率分布哈夫曼编码实现julia官方文档建议的变量命名规范&#xff1a;julia源码 熵一、信息熵的定义二、信息量的概念三、信息熵的计算步骤四、信息熵的性质五、应用举例 哈夫曼编码&#xff08;Huffman Coding&#xff09;基本原理编码过程特点应用具体过程1. 排序概…