首页 > 其他分享 >GoLang context包

GoLang context包

时间:2023-10-07 16:23:25浏览次数:42  
标签:WithTimeout 过期 GoLang WithDeadline 取消 context 超时

初始化一个context如果确定是开头则用Background,如果不确定则用ToDo

context包核心API有四个
1.context.WithValue 设置键值对,并且返回一个新的context实例

2.context.WithCancel

3.context.WithDeadline

4.context.WithTimeout 三者都返回一个可取消的context实例和取消函数,WithTimeout实际上就是调用了WithDeadline。

Context 接口核心 API 有四个
Deadline :返回过期时间,如果 ok 为 false,说明没有设置过期时间。略常用
Done:返回一个 channel,一般用于监听 Context 实例的信号,比如说过期,或者正常关闭。常用
Err:返回一个错误用于表达 Context 发生了什么。Canceled => 正常关闭,DeadlineExceeded => 过期超时。比较常用
Value:取值

context包主要用于安全传递数据和控制链路

安全传递数据:指在请求执行上下文中线程安全的传递数据,依赖于WithValue方法

父与子关系

当父亲取消或超时时所有派生的子context都被取消或者超时

当找key时,子context从自己向父亲查找

即,控制是从上至下的,查找是从下至上的,父无法访问子内容,子取消和超时与父没有关系

控制

context包提供了三个控制方法,WithCancel,WithDeadline和WithTimeout

没有过期时间手动取消,使用WithCancel

在固定时间点取消,使用WithDeadline

在一段时间后过期,使用WithTimeout

注意事项

一般只用做方法参数,而且作为第一个参数

不要用作结构体字段

标签:WithTimeout,过期,GoLang,WithDeadline,取消,context,超时
From: https://www.cnblogs.com/mengqi-go/p/17746576.html

相关文章

  • golang实现一个简单的文件浏览下载功能代码示例
    想省事用Claude(一个依托chatgpt的AI)生成一段golang的文件浏览下载示例,结果给生成的代码大概是这样的(省去了无关部分,主要部分如下):http.HandleFunc("/*",downloadFile)http.HandleFunc("/",showFileList)测试之后,结果发现每次都会走到“/”下去,无论如何都不会......
  • Strimzi Kafka Bridge(桥接)实战之三:自制sdk(golang版本)
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览本文是《StrimziKafkaBridge(桥接)实战》的第三篇,前文咱们掌握了StrimziKafkaBridge的基本功能:基于http提供各种kafka消息的服务此刻,如果想通过http接口调......
  • 基于goravel的CMS,企业官网通用golang后台管理系统
    2023年9月11日10:47:00仓库地址:https://gitee.com/open-php/zx-goravel-websiteCMS,企业官网通用PHP后台管理系统框架介绍GoravelSCUI后端开发组件go1.20Goravel1.13数据库sql(使用最新日期文件)goravel\doc\sql_bakmysql8.0前端开发组件scui1.6.9nodev14.21.......
  • 11 ServletContext 的应用
    实际上就是讲解servletcontext对象的方法。。。。经典白学,过时的,不会被用到的技术1.资源共享2.转发requestdispather().forward();3.读取资源文件......
  • 10 ServletContext 对象
    ServletContext对象:一个模板中只定义一个,可以使得不同的页面之间进行数据交流执行三部曲:1.SetServletContext.java2.GetServletContext.java3.web.xmlimportjavax.servlet.ServletContext;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServle......
  • Wpf经验技巧-使用 d:DataContext 指定 DataContext 的类型.
    VM代码:V代码(版本1):没有指定DataContext的类型,所以下面的绑定并不知道P1和P3到底是什么,也就无法在代码编辑时检测出绑定是否正确.如果写错了,只能等到程序运行并打开这个窗口时报错才能知道.V代码(版本2):通过d:DataContext指定了DataContext的类型,所以下面的绑定......
  • Golang struct 结构体 面向对象编程思想-抽象 理解抽象
    我们在前面去定义一个结构体时候,实际上就是把一类事物的共有的属性(字段)和行为(方法)提取出来,形成一个物理模型(模板),这种研究问题的方法称为抽象。当你将一类事物的属性和行为抽取出来之后,下一步就是将代码体现出来。下面就是模拟银行卡存款取款查询余额方式。packagemainimport"fm......
  • Golang goroutine 进程、线程、并发、并行
    goroutine 看一个需求需求:要求统计1-200000000000的数字中,哪些是素数?分析思路:1)传统的方法,就是使用一个循环,循环的判断各个数是不是素数(一个任务就分配给一个cpu去做,这样很不划算,而且非常慢)2)使用并发或者并行的方式,将统计素数的任务分配给多个goroutine去完成,这时就会使用到gor......
  • Golang gorm manytomany 多对多 更新、删除、替换
       Delete移除只删除中间表的数据  删除原有的varaArticle1 db.Preload("Tag1s").Take(&a,1) fmt.Printf("%v",a){1k8s[{1cloud[]}{2linux[]}]}mysql>select*fromarticle1;+----+--------+|id|title|+----+--------+|1|k8s......
  • Golang gin Cookie的使用
    Cookie介绍HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出Cookie就是解决HTTP协议无状态的方案之一,中文是小甜饼的意思Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同......