urlx

package
v0.4.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 11, 2026 License: MIT Imports: 3 Imported by: 1

Documentation

Overview

Package urlx provides a more user-friendly URL parser, modifier and builder. TODO Opaque support

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddDefaultPort

func AddDefaultPort(scheme string, port uint16) (conflicted bool)

func DefaultPort

func DefaultPort(scheme string) (port uint16, ok bool)

Types

type Modifier

type Modifier func(u *url.URL)

func TrimFragment

func TrimFragment() Modifier

func TrimPort

func TrimPort() Modifier

func TrimQuery

func TrimQuery() Modifier

func WithDefaultPort

func WithDefaultPort() Modifier

func WithFragment

func WithFragment(fragment string) Modifier

func WithHost

func WithHost(host string) Modifier

func WithPath

func WithPath(path string) Modifier

func WithPort

func WithPort(port uint16) Modifier

func WithQuery

func WithQuery(query string) Modifier

func WithQueryParams

func WithQueryParams(q url.Values) Modifier

func WithScheme

func WithScheme(scheme string) Modifier

func WithUserinfo

func WithUserinfo(username, password string) Modifier

type URL

type URL struct {
	url.URL
}

func Build

func Build(modifiers ...Modifier) *URL
Example
package main

import (
	"fmt"
	"net/url"

	"github.com/xoctopus/x/urlx"
)

func main() {
	u := urlx.Build(
		urlx.WithScheme("HTTPs"),
		urlx.WithUserinfo("user", "pass"),
		urlx.WithHost("example.com:9999"),
		urlx.WithPort(80),
		urlx.TrimPort(),
		urlx.WithDefaultPort(),
		urlx.WithPath("login"),
		urlx.WithQuery("k1=v1&k1=v2&k1=v3"),
		urlx.WithQueryParams(url.Values{
			"k2": []string{"v1", "v2", "v3"},
		}),
	)
	fmt.Println(u.String())

	u, _ = urlx.Parse(u.String(), urlx.TrimQuery(), urlx.WithFragment("section1"))
	fmt.Println(u.String())

	u = urlx.From(u.URL, urlx.TrimFragment(), urlx.TrimPort())
	fmt.Println(u.String())
	fmt.Println(u.Port())

	u = urlx.From(u.URL, urlx.WithScheme("test"), urlx.WithPort(30000))
	fmt.Println(u.Port())

	u = urlx.From(u.URL, urlx.WithScheme("test"), urlx.TrimPort())
	fmt.Println(u.Port())

	urlx.AddDefaultPort("test", 30000)
	fmt.Println(u.Port())

	u, _ = urlx.Parse("http://localhost\n:8080")
	fmt.Println(u.IsZero())

}
Output:
https://user:pass@example.com:443/login?k1=v1&k1=v2&k1=v3&k2=v1&k2=v2&k2=v3
https://user:pass@example.com:443/login#section1
https://user:pass@example.com/login
443
30000
0
30000
true

func From

func From(from url.URL, modifiers ...Modifier) *URL

func Parse

func Parse(raw string, modifiers ...Modifier) (*URL, error)

func (*URL) IsZero

func (u *URL) IsZero() bool

func (*URL) Port

func (u *URL) Port() uint16

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL