2017-06-29 20 views
1

私はデフォルトのタイムアウト値を持つカスタムHTTPクライアントを持っています。コードは次のようである:ctxはタイムアウトが設定されたりしていない場合コンテキストにすでにタイムアウトが設定されているかどうかを確認できますか?

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) 
} 

はどうすれば確認できますか?

答えて

2

context.Deadlineからbool値の戻りを確認してください:

締め切りは、このコンテキスト のために実行された処理をキャンセルしなければならない時間を返します。デッドラインが に設定されていない場合、デッドラインはok == falseを返します。連続してデッドラインを呼び出すと、同じ結果が返されます。

func (c *Client) Send(ctx context.Context, r *http.Request) (int, []byte, error) { 
    if _, deadlineSet := ctx.Deadline(); !deadlineSet { 
     ctx, _ = context.WithTimeout(ctx, c.timeout) 
    } 
} 
関連する問題