code: func (c *Config) Exchange(ctx context.Context, code string) (*Token, error) {
  	return retrieveToken(ctx, c, url.Values{
  		"grant_type":   {"authorization_code"},
  		"code":         {code},
  		"redirect_uri": internal.CondVal(c.RedirectURL),
  		"scope":        internal.CondVal(strings.Join(c.Scopes, " ")),
  	})
  }
docs: // Exchange converts an authorization code into a token.
  //
  // It is used after a resource provider redirects the user back
  // to the Redirect URI (the URL obtained from AuthCodeURL).
  //
  // The HTTP client to use is derived from the context.
  // If a client is not provided via the context, http.DefaultClient is used.
  //
  // The code will be in the *http.Request.FormValue("code"). Before
  // calling Exchange, be sure to validate FormValue("state").