老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

身为Gopher人员,还不知道Go context是什么?快来看看吧

老男孩IT教育

常见问题

2021年9月24日 18:20

GO是一个非常新型的编程语言,在近几年也在慢慢被广大开发者所接受和使用,现如今已有不少的GO开发人员,那各位知道GO context是什么吗?如果你还不知道,请阅读完这篇文章,希望能帮助到你,详细内容请看下文:

       GO是一个非常新型的编程语言,在近几年也在慢慢被广大开发者所接受和使用,现如今已有不少的GO开发人员,那各位知道GO context是什么吗?如果你还不知道,请阅读完这篇文章,希望能帮助到你,详细内容请看下文:

GO教程

       GO1.7标准库引入context,中文可以理解为上下文,准确说它是goroutine的上下文,包含goroutine的运行状态、环境、现场等信息。

       context主要用来在goroutine之间传递上下文信息,包括取消信号、超时时间、截止时间、k-v等。

       随着context包的引入,标准库中很多接口因此加上了context参数,例如database/sql包,它几乎成为了并发控制和超时控制的标准做法。

       那它的使用场景是怎样的呢?

       在GO http包的server中,每一个请求都有一个对应的goroutine去处理,请求处理函数通常会启动额外的goroutine用来访问后端服务,比如数据库和RPC服务。

       用来处理一个请求的goroutine通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的token、请求的截止时间。当一个请求被取消或超时时,所有用来处理该请求的goroutine都应该迅速退出,然后系统才能释放这些goroutine占用的资源。

       有哪些需要注意的?

       1、不要将Context放入结构体,相反Context应该作为第一个参数传入,命名为ctx;

       2、即使函数允许,也不要传入nil的context。如果不知道用哪种context,可以使用context.TODO;

       3、相同的context可以传递给不同的goroutine,因为context是并发安全的。

       总之,context包的源码非常短,也非常适合于学习,一定要去读一下,除了使用context控制并发,我们还可以使用waitgroup。

  想要学习GO语言,欢迎来老男孩教育试听。来校试听即送《8周掌握Go语言》书籍,本书由老男孩教育多位金牌讲师依托老男孩教育多年线下教育实践经验撰写,采用“理论+代码实例”的形式详细讲解Go语言基础、函数、结构体、方法、接口、常用标准库、网络编程、并发编程、测试等部分。本书适合想系统学习Go语言、快速上手Go语言开发的读者。

  推荐阅读:

  Go语言常见面试题讲解!老男孩GO语言培训

  【GO语言培训教程】小白必看,Go语言异常处理!

  Go语言可以做什么?优势在哪里?

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。