1 // Copyright 2014 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package internal 6 7 import ( 8 "context" 9 "net/http" 10 ) 11 12 // HTTPClient is the context key to use with golang.org/x/net/context's 13 // WithValue function to associate an *http.Client value with a context. 14 var HTTPClient ContextKey 15 16 // ContextKey is just an empty struct. It exists so HTTPClient can be 17 // an immutable public variable with a unique type. It's immutable 18 // because nobody else can create a ContextKey, being unexported. 19 type ContextKey struct{} 20 21 func ContextClient(ctx context.Context) *http.Client { 22 if ctx != nil { 23 if hc, ok := ctx.Value(HTTPClient).(*http.Client); ok { 24 return hc 25 } 26 } 27 return http.DefaultClient 28 } 29