Golang context 包,定义了context 类型,携带截止日期,取消信号,和其它跨API请求作用域及进程间的值。

到服务器的请求应该创建一个 Context,服务器对外的调用应该接受一个Context。

函数之间的调用链必须传递 Context,可选地可以用 WithCancel、WithDeadline、WithTimeout、WithValue 创建的派生 Context。

当一个 Context 取消了,所有的派生 Context 也同样被取消。

WithCancel, WithDeadline, WithTimeout 函数携带一个Context(父级)并且返回一个派生Context(子级)和一个 CancelFunc。

调用 CancelFunc 取消子级和子子级,移除父级到子级的引用,并停止任务相关的定时器。

无法调用 CancelFunc 让子级和子子级泄露,直到父级被取消或者定时器触发。Go vet 工具检测在所有控制流路径上使用的 CancelFuncs。

使用 Context 的程序应该按照这些规则来保持包之间的接口一致和支持静态分析工具检测Context传播:

1.不把 Context 存到一个结构类型中,而是明确传递到每个需要的方法中。Context 应该是第一个参数,一般命名成 ctx:

    func DoSomething(ctx context.Context, arg Arg) error {
// ... use ctx ...
}

2.不要传一个 nil Context,即使函数允许。如果不确定使用哪一个 Context,传递一个 context.TODO

3.只对请求作用域的数据如 传输处理和APIs 使用 context 的值。不是作为可选参数传递给函数。

4. 同一个Context 可以传递给 运行在不同 goroutine 里的函数;Context 同时被多个 goroutine 使用是安全的。

Refer:Go SDK/src/context/context.go

Link:https://www.cnblogs.com/farwish/p/15840531.html

[Go] Golang Context 包的注意点的更多相关文章

  1. Golang Context 包详解

    Golang Context 包详解 0. 引言 在 Go 语言编写的服务器程序中,服务器通常要为每个 HTTP 请求创建一个 goroutine 以并发地处理业务.同时,这个 goroutine 也 ...

  2. Golang context包解读

    Context 通常被译作 上下文 ,一般理解为程序单元的一个运行状态.现场.快照,而翻译中 上下 又很好地诠释了其本质,上下上下则是存在上下层的传递, 上 会把内容传递给 下 . 在Go语言中,程序 ...

  3. golang context包

    go context标准库 context包在Go1.7版本时加入到标准库中.其设计目标是给Golang提供一个标准接口来给其他任务发送取消信号和传递数据.其具体作用为: 可以通过context发送取 ...

  4. Golang Context 的原理与实战

    本文让我们一起来学习 golang Context 的使用和标准库中的Context的实现. golang context 包 一开始只是 Google 内部使用的一个 Golang 包,在 Gola ...

  5. golang中的context包

    标准库的context包 从设计角度上来讲, golang的context包提供了一种父routine对子routine的管理功能. 我的这种理解虽然和网上各种文章中讲的不太一样, 但我认为基本上还是 ...

  6. golang中context包学习

    摘要 go语言中goroutine之间的关联关系,缺乏维护,在erlang中有专门的机制来保障新开仟程的生命周期, 在go语言中,只能通过channel + select来实现,但不够直观,感觉很绕. ...

  7. 【GoLang】golang context channel 详解

    代码示例: package main import ( "fmt" "time" "golang.org/x/net/context" ) ...

  8. Golang Context 详细介绍

    Golang context 本文包含对context实现上的分析和使用方式,分析部分源码讲解比价多,可能会比较枯燥,读者可以直接跳过去阅读使用部分. ps: 作者本着开源分享的精神撰写本篇文章,如果 ...

  9. golang context 剖析 1.7.4 版本

    1. 内部结构之 - timerCtx . type timerCtx struct { cancelCtx timer *time.Timer // Under cancelCtx.mu. dead ...

  10. 带小伙伴手写 golang context

    前言 - context 源码 可以先了解官方 context.go 轮廓. 这里捎带保存一份当前 context 版本备份. // Copyright 2014 The Go Authors. Al ...

随机推荐

  1. 开发必会系列:《spring实战(第4版)》读书笔记

    一  spring的核心 1.主要概念 DI能够让相互协作的软件组件保持松散耦合,而面向切面编程(AOP)允许你把遍布应用各处的功能分离出来形成可重用的组件. spring有两类容器实现方式,bean ...

  2. C# URL参数编码

    string s = "lw123abc测试信息!@#¥%--&*()--+"; Console.WriteLine("原数据:\t\t" + s); ...

  3. NPM包管理器

    一.简介 1.NPM全称Node Package Manager,是Node.js包管理工具,是全球最大的模块生态系统,里面所有的模块都是开源免费的:也是Node.js的包管理工具,相当于Maven. ...

  4. verilog之readmemb

    verilog之readmemb 1.基本作用 用于读取存储器的值的系统函数.这里首先要知道什么是存储器.在verilog中,有一些比较大的数据是需要存储的,一般需要使用存储器,语法结构类似二维数组. ...

  5. KingbaseES 语句like前匹配如何使用索引

    前言 有现场同事反馈 sql语句 like 使用后缀通配符 % 不走索引. 至于执行计划没走索引的原因与KingbaseES数据库中的排序规则相关. 测试 测试环境: KingbaseESV8R6C7 ...

  6. MySQL查询表结构信息SQL语句

    一.获取某数据库下的所有数据表名 SELECT TABLE_NAME, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA ...

  7. HarmonyOS SDK,赋能开发者实现更具象、个性化开发诉求

    随着移动互联网的逐步成熟,用户的需求越来越细化.鸿蒙生态为开发者提供的HarmonyOS SDK开放能力,高效赋能美团外卖等合作伙伴实现更具象.个性化的开发诉求,给用户提供更丰富便捷的体验. 点击链接 ...

  8. amcap使用方法

    1.选择设备 device 里面显示的是设备,分割线上面是视频设备,分割线下面是音频设备 2.打开图像 options > Preview  勾选上就是打开视频,再次点击取消勾线就是关闭视频 3 ...

  9. mysql 必知必会整理—视图[十二]

    前言 简单整理一下视图. 正文 视图: 需要MySQL 5 MySQL 5添加了对视图的支持.因此,本章内容适用于MySQL 5及以后的版本. 视图是虚拟的表.与包含数据的表不一样,视图只包含使用时动 ...

  10. redis 简单整理——Lua[十一]

    前言 简单介绍一下Lua. 正文 为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集 成Lua脚本来解决这个问题. 前面提及到pipline,也提及到pipline 并不是原子性的,如 ...