code: func Dial(uri string) (*Service, error) {
  	u, err := url.Parse(uri)
  	if err != nil {
  		return nil, err
  	}
  	if u.Scheme != "cloudinary" {
  		return nil, errors.New("Missing cloudinary:// scheme in URI")
  	}
  	secret, exists := u.User.Password()
  	if !exists {
  		return nil, errors.New("No API secret provided in URI.")
  	}
  	s := &Service{
  		cloudName:     u.Host,
  		apiKey:        u.User.Username(),
  		apiSecret:     secret,
  		uploadResType: ImageType,
  		simulate:      false,
  		verbose:       false,
  	}
  	// Default upload URI to the service. Can change at runtime in the
  	// Upload() function for raw file uploading.
  	up, err := url.Parse(fmt.Sprintf("%s/%s/image/upload/", baseUploadUrl, s.cloudName))
  	if err != nil {
  		return nil, err
  	}
  	s.uploadURI = up
  
  	// Admin API url
  	adm, err := url.Parse(fmt.Sprintf("%s/%s", baseAdminUrl, s.cloudName))
  	if err != nil {
  		return nil, err
  	}
  	adm.User = url.UserPassword(s.apiKey, s.apiSecret)
  	s.adminURI = adm
  	return s, nil
  }
docs: // Dial will use the url to connect to the Cloudinary service.
  // The uri parameter must be a valid URI with the cloudinary:// scheme,
  // e.g.
  //  cloudinary://api_key:api_secret@cloud_name