code: func NewForecast(forecastType, unit, lang, key string, options ...Option) (*ForecastWeatherData, error) {
  	unitChoice := strings.ToUpper(unit)
  	langChoice := strings.ToUpper(lang)
  
  	if forecastType != "16" && forecastType != "5" {
  		return nil, errForecastUnavailable
  	}
  
  	if !ValidDataUnit(unitChoice) {
  		return nil, errUnitUnavailable
  	}
  
  	if !ValidLangCode(langChoice) {
  		return nil, errLangUnavailable
  	}
  
  	settings := NewSettings()
  	if err := setOptions(settings, options); err != nil {
  		return nil, err
  	}
  
  	var err error
  	k, err := setKey(key)
  	if err != nil {
  		return nil, err
  	}
  	forecastData := ForecastWeatherData{
  		Unit:     DataUnits[unitChoice],
  		Lang:     langChoice,
  		Key:      k,
  		Settings: settings,
  	}
  
  	if forecastType == "16" {
  		forecastData.baseURL = forecast16Base
  		forecastData.ForecastWeatherJson = &Forecast16WeatherData{}
  	} else {
  		forecastData.baseURL = forecast5Base
  		forecastData.ForecastWeatherJson = &Forecast5WeatherData{}
  	}
  
  	return &forecastData, nil
  }
docs: // NewForecast returns a new HistoricalWeatherData pointer with
  // the supplied arguments.