code: func Decode(target interface{}) error {
  	nFields, err := decode(target, false)
  	if err != nil {
  		return err
  	}
  
  	// if we didn't do anything - the user probably did something
  	// wrong like leave all fields unexported.
  	if nFields == 0 {
  		return ErrNoTargetFieldsAreSet
  	}
  
  	return nil
  }
docs: // Decode environment variables into the provided target.  The target
  // must be a non-nil pointer to a struct.  Fields in the struct must
  // be exported, and tagged with an "env" struct tag with a value
  // containing the name of the environment variable.  An error is
  // returned if there are no exported members tagged.
  //
  // Default values may be provided by appending ",default=value" to the
  // struct tag.  Required values may be marked by appending ",required"
  // to the struct tag.  It is an error to provide both "default" and
  // "required". Strict values may be marked by appending ",strict" which
  // will return an error on Decode if there is an error while parsing.
  // If everything must be strict, consider using StrictDecode instead.
  //
  // All primitive types are supported, including bool, floating point,
  // signed and unsigned integers, and string.  Boolean and numeric
  // types are decoded using the standard strconv Parse functions for
  // those types.  Structs and pointers to structs are decoded
  // recursively.  time.Duration is supported via the
  // time.ParseDuration() function and *url.URL is supported via the
  // url.Parse() function. Slices are supported for all above mentioned
  // primitive types. Semicolon is used as delimiter in environment variables.