Utilities

Small, dependency-free helpers for everyday Go code. Each lives in its own package under utils/.

  1. Strings — utils/strings
  2. Slices — utils/slice
  3. Maps — utils/map
  4. Integers — utils/int
  5. Dates — utils/date
  6. Conversions — utils/conv
  7. Files — utils/file

Package names differ from their directories for historical reasons — import with an alias that reads well, e.g. strutil "github.com/HiWay-Media/hwm-go-utils/utils/strings".

Strings — utils/strings

Package strings_utils.

Function Example Result
EncodeURL(raw) https://cdn/x?name=é x&t=a/b https://cdn/x?name=%C3%A9+x&t=a%2Fb — values escaped once, userinfo and fragment kept, "" if unparsable
CleanUrlPath(url) https://host//a///b https://host/a/b
Contains(list, s) ["a","b"], "b" true
ContainsWord(s, word) "Hello World", "world" true (case-insensitive substring)
RemoveSlice(list, i) ["a","b","c"], 1 ["a","c"] — returns a copy, input untouched, out-of-range index is a no-op
ReverseString(s) "héllo" "olléh" (rune-aware)
CountWords(s) " one two three " 3
PrettyPrint(v) any value indented JSON string

Slices — utils/slice

Package slice_utils, generic.

slice_utils.Contains([]int{1, 2, 3}, 2)                     // true
slice_utils.RemoveDuplicates([]string{"eu", "us", "eu"})   // ["eu" "us"], order kept
slice_utils.Sum([]int{1, 2, 3})                             // 6

Maps — utils/map

Package map_utils, generic.

map_utils.MergeMaps(defaults, overrides) // new map, overrides win on duplicate keys
map_utils.InvertMap(map[string]int{"a": 1}) // map[int]string{1: "a"} — values must be unique

Integers — utils/int

Package int_utils.

int_utils.Min(4, 2, 9)  // 2   (0 when called with no arguments)
int_utils.Max(4, 2, 9)  // 9
int_utils.IsEven(4)     // true
int_utils.IsOdd(4)      // false

Dates — utils/date

Package date_utils. An empty layout means 2006-01-02.

d, _ := date_utils.ParseDate("2026-09-24", "")
date_utils.FormatDate(d, "")               // "2026-09-24"
date_utils.AddDays(d, 7)                   // 2026-10-01
date_utils.AddMonths(d, 1)                 // 2026-10-24
date_utils.AddYears(d, 1)                  // 2027-09-24
date_utils.DaysBetween(d, d.AddDate(0, 0, 10)) // 10 (whole days, truncated)
date_utils.IsWeekend(d)                    // false (Thursday)
date_utils.DaysInMonth(2028, time.February) // 29

Conversions — utils/conv

Package conv_utils.

n, err := conv_utils.StrToInt("42") // 42, nil
conv_utils.IntToStr(42)             // "42"
conv_utils.IntToFloat(3)            // 3.0
conv_utils.FloatToInt(3.9)          // 3 (truncates)

Files — utils/file

Package file_utils.

if err := file_utils.WriteToFile(report, "/tmp/report.json"); err != nil { // create or truncate
	return err
}
file_utils.FileExists("/tmp/report.json") // true — false for directories and unreadable paths