code: func (c *cachedGetter) Token() (string, error) {
  	c.mutex.Lock()
  	defer c.mutex.Unlock()
  
  	var err error
  	// no token or exceeds the TTL
  	if c.token == "" || time.Since(c.born) > c.ttl {
  		c.token, err = c.tokenGetter.Token()
  		if err != nil {
  			return "", fmt.Errorf("failed to get token: %s", err)
  		}
  		c.born = time.Now()
  	}
  	return c.token, nil
  }
docs: // Token returns the current available token, create a new one if expired.