如何将自定义客户端传递给Golang oauth2.Exchange

The documentation for oauth2.Exchange at https://godoc.org/golang.org/x/oauth2#Config.Exchange says:

The HTTP client to use is derived from the context. If a client is not provided via the context, http.DefaultClient is used.

Now I have created a http.Client with my own settings. How do I get the oauth2.Exchange function to use it?

The oauth2 package defines the following variable:

var HTTPClient internal.ContextKey

HTTPClient is the context key to use with golang.org/x/net/context's WithValue function to associate an *http.Client value with a context.

Use the above variable as the context key when constructing the context to pass to Exchange:

client := &http.Client{
    // TODO
}
parent := oauth2.NoContext()
ctx := context.WithValue(parent, oauth2.HTTPClient, client)
tkn, err := c.Exchange(ctx, code)