Golang OAuth客户端和刷新令牌

I have configured Go with OAuth against Google. I am then using the access token to do requests against gmail api, contacts api, drive api etc etc. These need the string that is the actual access token, as opposed to the object *oauth2.Token.

Everything works while the access token is valid. Once its not valid, I can't access the data. This makes sense as I need to use the refresh token to get a new access token, before doing the queries against the services.

My understanding is the *http.Client that you create from the OAuth token will do the refresh for a new access token if its necessary, automatically.

However what I am not sure about is how to get the latest access token out of the client to then use as part of the GET request against Google APIs to auth the service.

So to summarize:

//generate client
//get accessToken.AccessToken from client
//do HTTP GET request to get a users image from contact api (or something)
//pass as either a GET parameter, or as a header the access token

If the client handles refreshing the token, then I need to use the client to get the access token so its valid. How do you do that? I've looked into using config.TokenSource(ctx, tok) and then i can call TokenSource on that, but that doesn't need the client and therefore the token is not refreshed as far as I can tell.