code: func (c *ClientCache) ClientForVersion(version *unversioned.GroupVersion) (*client.Client, error) {
  	if version != nil {
  		if client, ok := c.clients[*version]; ok {
  			return client, nil
  		}
  	}
  	config, err := c.ClientConfigForVersion(version)
  	if err != nil {
  		return nil, err
  	}
  
  	kubeclient, err := client.New(config)
  	if err != nil {
  		return nil, err
  	}
  	c.clients[*config.GroupVersion] = kubeclient
  
  	// `version` does not necessarily equal `config.Version`.  However, we know that if we call this method again with
  	// `version`, we should get a client based on the same config we just found.  There's no guarantee that a client
  	// is copiable, so create a new client and save it in the cache.
  	if version != nil {
  		configCopy := *config
  		kubeclient, err := client.New(&configCopy)
  		if err != nil {
  			return nil, err
  		}
  		c.clients[*version] = kubeclient
  	}
  
  	return kubeclient, nil
  }
docs: // ClientForVersion initializes or reuses a client for the specified version, or returns an
  // error if that is not possible