Skip to content

urlutils

URL parsing and query string builder utilities.

Overview

The urlutils package provides utilities for working with URLs and building query strings from maps and structs with struct tag support.

Functions

Query Builders: QueryStringifyMap, QueryStringifyStruct URL Parsing: Parse, MustParse URL Inspection: IsAbsolute, GetDomain, GetScheme, GetPath

Example

import "github.com/Goldziher/go-utils/urlutils"

// Build query string from map
params := map[string]any{
    "search": "golang",
    "page":   1,
    "tags":   []string{"generics", "utils"},
    "active": true,
}
query := urlutils.QueryStringifyMap(params)
// Result: "active=true&page=1&search=golang&tags=generics&tags=utils"

// Build query string from struct with tags
type SearchQuery struct {
    Query    string   `qs:"q"`
    Page     int      `qs:"page"`
    PageSize int      `qs:"page_size"`
    Tags     []string `qs:"tag"`
    Active   bool     `qs:"active"`
}

q := SearchQuery{
    Query:    "golang",
    Page:     1,
    PageSize: 20,
    Tags:     []string{"generics", "utils"},
    Active:   true,
}
query := urlutils.QueryStringifyStruct(q, "qs")
// Result: "active=true&page=1&page_size=20&q=golang&tag=generics&tag=utils"

// URL parsing and inspection
u, err := urlutils.Parse("https://example.com:8080/path?key=value")
if err == nil {
    domain := urlutils.GetDomain("https://example.com:8080/path")  // "example.com:8080"
    scheme := urlutils.GetScheme("https://example.com/path")       // "https"
    path := urlutils.GetPath("https://example.com/path/to/page")   // "/path/to/page"
    isAbs := urlutils.IsAbsolute("https://example.com")            // true
}

// Panic on parse error (use when URL is known to be valid)
u := urlutils.MustParse("https://example.com/path")