go语言中的context是什么

简介

创新互联公司专注于德宏州企业网站建设,响应式网站建设,成都商城网站开发。德宏州网站建设公司,为德宏州等地区提供建站服务。全流程按需定制制作,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务

context在Go1.7之后就进入标准库中了。它主要的用处如果用一句话来说,是在于控制goroutine的生命周期。当一个计算任务被goroutine承接了之后,由于某种原因(超时,或者强制退出)我们希望中止这个goroutine的计算任务,那么就用得到这个Context了。

对于 Golang 开发者来说context(上下文)包一定不会陌生。但很多时候,我们懒惰的只是见过它,或能起到什么作用,并不会去深究它。

应用场景

在 Go http 包的 Server 中,每一个请求在都有一个对应的goroutine去处理。

请求处理函数通常会启动额外的goroutine用来访问后端服务,比如数据库和 RPC 服务。

用来处理一个请求的goroutine通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的 token、请求的截止时间。

当一个请求被取消或超时时,所有用来处理该请求的goroutine都应该迅速退出,然后系统才能释放这些goroutine占用的资源

Context 原理

Context 的调用应该是链式的,通过WithCancel,WithDeadline,WithTimeout或WithValue派生出新的 Context。当父 Context 被取消时,其派生的所有 Context 都将取消。

通过context.WithXXX都将返回新的 Context 和 CancelFunc。调用 CancelFunc 将取消子代,移除父代对子代的引用,并且停止所有定时器。未能调用 CancelFunc 将泄漏子代,直到父代被取消或定时器触发。go vet工具检查所有流程控制路径上使用 CancelFuncs。

Context 使用原则

  1. 不要把Context放在结构体中,要以参数的方式传递

  2. 以Context作为参数的函数方法,应该把Context作为第一个参数,放在第一位。

  3. 给一个函数方法传递Context的时候,不要传递nil,如果不知道传递什么,就使用context.TODO

  4. Context的Value相关方法应该传递必须的数据,不要什么数据都使用这个传递

  5. Context是线程安全的,可以放心的在多个goroutine中传递

以上就是golang context用来干吗的详细内容,更多请关注创新互联其它相关文章!


网站题目:go语言中的context是什么
网站链接:http://azwzsj.com/article/jjgdee.html