diff --git a/credential/default_access_token.go b/credential/default_access_token.go index 25416e7c7..90dffd1eb 100644 --- a/credential/default_access_token.go +++ b/credential/default_access_token.go @@ -66,8 +66,9 @@ func (ak *DefaultAccessToken) GetAccessToken() (accessToken string, err error) { func (ak *DefaultAccessToken) GetAccessTokenContext(ctx context.Context) (accessToken string, err error) { // 先从cache中取 accessTokenCacheKey := fmt.Sprintf("%s_access_token_%s", ak.cacheKeyPrefix, ak.appID) - if val := ak.cache.Get(accessTokenCacheKey); val != nil { - return val.(string), nil + val := ak.cache.Get(accessTokenCacheKey) + if accessToken = val.(string); accessToken != "" { + return } // 加上lock,是为了防止在并发获取token时,cache刚好失效,导致从微信服务器上获取到不同token @@ -75,8 +76,9 @@ func (ak *DefaultAccessToken) GetAccessTokenContext(ctx context.Context) (access defer ak.accessTokenLock.Unlock() // 双检,防止重复从微信服务器获取 - if val := ak.cache.Get(accessTokenCacheKey); val != nil { - return val.(string), nil + val = ak.cache.Get(accessTokenCacheKey) + if accessToken = val.(string); accessToken != "" { + return } // cache失效,从微信服务器获取