code: func ParseDuration(cand string) (time.Duration, error) {
  	if dur, err := time.ParseDuration(cand); err == nil {
  		return dur, nil
  	}
  
  	var dur time.Duration
  	ok := false
  	for _, match := range durationMatcher.FindAllStringSubmatch(cand, -1) {
  
  		factor, err := strconv.Atoi(match[2]) // converts string to int
  		if err != nil {
  			return 0, err
  		}
  		unit := strings.ToLower(strings.TrimSpace(match[3]))
  
  		for _, variants := range timeUnits {
  			last := len(variants) - 1
  			multiplier := timeMultiplier[variants[0]]
  
  			for i, variant := range variants {
  				if (last == i && strings.HasPrefix(unit, variant)) || strings.EqualFold(variant, unit) {
  					ok = true
  					dur += (time.Duration(factor) * multiplier)
  				}
  			}
  		}
  	}
  
  	if ok {
  		return dur, nil
  	}
  	return 0, fmt.Errorf("unable to parse %s as duration", cand)
  }
docs: // ParseDuration parses a duration from a string, compatible with scala duration syntax