概述
在golang官方文档context package - context - Go Packages中是这样介绍context包的:
在context包中定义了context类型来在不同的Goroutine 之间传递上下文,携带截止时间、取消信号以及携带上下文的系统参数(k-v)的类型。对服务器的传入请求应该创建上下文,对服务器的传出调用应该接受上下文。它们之间的函数调用链必须传播上下文,可以选择将其替换为使用WithCancel、WithDeadline、WithTimeout或WithValue创建的派生上下文。当一个Context被取消时,所有从它派生的Context也会被取消。WithCancel、WithDeadline和WithTimeout函数使用。
Context 应该是第一个参数,通常命名为 ctx:
func DoSomething(ctx context.Context, arg Arg) error {
// ... use ctx ...
}
即使函数允许,也不要传递nil上下文。通过上下文。如果您不确定要使用哪个上下文,则TODO。仅将上下文值用于传输进程和api的请求作用域数据,不能用于向函数传递可选参数。同一个Context可以被传递给运行在不同例程中的函数;上下文对于多个例程同时使用是安全的。
Context诞生的原因
其实在 Context包诞生之前,也有一种叫做 "context" 的机制,只不过它是私有的,只能在 Go 标准库内部使用。而在 Go 1.7 中,标准库将 context 机制公开了出来,使得开发者可以在自己的代码中使用它。 引入 context 的主要原因是为了解决在并发编程中的一些问题,比如在一个请求处理过程中,可能会启动多个 goroutine 来处理不同的任务,这些任务可能需要共享一些上下文信息,比如请求的截止时间、请求的 ID 等等。如果没有一个统一的机制来管理这些上下文信息,那么代码就会变得非常混乱,难以维护。 通过引入 context,开发者可以将这些上下文信息封装在一个 context 对象中,并将其传递给各个 goroutine,从而实现了上下文信息的统一管理。这样一来,代码就变得更加清晰、易于理解和维护了。文章来源:https://www.toymoban.com/news/detail-738459.html
在Context诞生之前是怎么做的?
多个文章来源地址https://www.toymoban.com/news/detail-738459.html
到了这里,关于Golang:浅析Context包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!