1.context.WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) 方法需要传入一个父上下文parent,和一个超时时间timeout,返回的是一个新的上下文Context,和一个取消上下文函数(参数)CancelFunc。 2、Err() error 1、在手动调用CancelFunc方法后调用该方法返回的是context cancelederr; 2、在...
1.context.WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) 方法需要传入一个父上下文parent,和一个超时时间timeout,返回的是一个新的上下文Context,和一个取消上下文函数(参数)CancelFunc。 2、Err() error 1、在手动调用CancelFunc方法后调用该方法返回的是context cancelederr; 2、在...
按照Context定义,Err()只需要返回一个error告知context被关闭的原因。对于cancelCtx来说只需要返回成员变量err即可。 还是直接看下源码: func (c *cancelCtx) Err() error { c.mu.Lock() err :=c.err c.mu.Unlock()returnerr } cancelCtx.err默认是nil,在context被cancel时指定一个error变量:var Canceled =...
var Canceled = errors.New("context canceled") var DeadlineExceeded error = deadlineExceededError{} type deadlineExceededError struct{} func (deadlineExceededError) Error() string { return "context deadline exceeded" } func (deadlineExceededError) Timeout() bool { return true } func (deadline...
因主动关闭: “context canceled”。 当context关闭后,Err()返回context的关闭原因; 当context还未关闭时,Err()返回nil; 2.1.4 Value() 有一种context,它不是用于控制呈树状分布的goroutine,而是用于在树状分布的goroutine间传递信息。 Value()方法就是用于此种类型的context,该方法根据key值查询map中的value。具...
//Err方法会返回当前Context结束的原因,它只会在Done返回的Channel被关闭时才会返回非空的值;//如果当前Context被取消就会返回Canceled错误;//如果当前Context超时就会返回DeadlineExceeded错误;//Value方法会从Context中返回键对应的值,对于同一个上下文来说,多次调用Value 并传入相同的Key会返回相同的结果,该方法仅用于...
返回nil如果Done方法返回的channel被关闭了,返回一个非nil的值,连续调用返回相同的结果context如果被取消了,返回 “context canceled”错误如果执行时间超过了Deadline,返回 “context deadline exceeded”错误Value方法,返回Context中key对应的value值,对于同一个context,多次调用获取同一个key的值会返回相同的结果。
emptyCtx是一个int类型的变量,但实现了context的接口。emptyCtx没有超时时间,不能取消,也不能存储任何额外信息,所以emptyCtx用来作为context树的根节点。 // An emptyCtx is never canceled, has no values, and has no deadline. It is not // struct{}, since vars of this type must have distinct addre...
父Context的副本// 这就是为什么子Context只能设置比父Context更短的超时时间的原因ifcur,ok:=parent.Deadline();ok&&cur.Before(d){// The current deadline is already sooner than the new one.returnWithCancel(parent)}c:=&timerCtx{deadline:d,}// ...returnc,func(){c.cancel(true,Canceled,nil)...