我可以检查上下文是否已设置超时吗?

sta*_*wer 2 go

我有一个自定义的 http 客户端,它有一个默认的超时值。代码是这样的:

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)
}
Run Code Online (Sandbox Code Playgroud)

如何检查是否ctx设置了超时?

Tim*_*per 6

检查 bool 返回值context.Deadline

截止日期返回应取消代表此上下文完成的工作的时间。当未设置截止日期时,截止日期返回 ok==false。对 Deadline 的连续调用返回相同的结果。

Deadline() (deadline time.Time, ok bool)
Run Code Online (Sandbox Code Playgroud)
func (c *Client) Send(ctx context.Context, r *http.Request) (int, []byte, error) {
    if _, deadlineSet := ctx.Deadline(); !deadlineSet {
        ctx, _ = context.WithTimeout(ctx, c.timeout)
    }
}
Run Code Online (Sandbox Code Playgroud)