英文:
Can I check if a context already has timeout set?
问题
你可以使用context.Context
的Deadline
方法来检查是否设置了超时。Deadline
方法返回一个时间戳和一个布尔值,表示是否设置了超时。如果超时已设置,则布尔值为true
,否则为false
。在你的代码中,你可以使用以下方式检查超时是否已设置:
func (c *Client) Send(ctx context.Context, r *http.Request) (int, []byte, error) {
if _, ok := ctx.Deadline(); !ok {
// 超时未设置
} else {
// 超时已设置
}
}
这样,你就可以根据超时是否已设置来执行相应的逻辑。
英文:
I have a custom http client, which has a default timeout value. The code is like this:
type Client struct {
*http.Client
timeout time.Duration
}
func (c *Client) Send(ctx context.Context, r *http.Request) (int, []byte, error) {
// If ctx has timeout set, then don't change it.
// Otherwise, create new context with ctx.WithTimeout(c.timeout)
}
How can I check if ctx
has timeout set or not?
答案1
得分: 9
从context.Deadline
中检查布尔返回值:
> Deadline返回应该取消代表此上下文完成的工作的时间。当没有设置截止日期时,Deadline返回ok==false。连续调用Deadline返回相同的结果。
func (c *Client) Send(ctx context.Context, r *http.Request) (int, []byte, error) {
if _, deadlineSet := ctx.Deadline(); !deadlineSet {
ctx, _ = context.WithTimeout(ctx, c.timeout)
}
}
英文:
Check the bool return value from context.Deadline
:
> Deadline returns the time when work done on behalf of this context
> should be canceled. Deadline returns ok==false when no deadline is
> set. Successive calls to Deadline return the same results.
> Deadline() (deadline time.Time, ok bool)
func (c *Client) Send(ctx context.Context, r *http.Request) (int, []byte, error) {
if _, deadlineSet := ctx.Deadline(); !deadlineSet {
ctx, _ = context.WithTimeout(ctx, c.timeout)
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论