package util import ( "net/url" "strconv" ) type QueryStringBuilder struct { values url.Values } func NewQueryStringBuilder() *QueryStringBuilder { return &QueryStringBuilder{ values: url.Values{}, } } func (b *QueryStringBuilder) SetString(name, value string) { b.values.Set(name, value) } func (b *QueryStringBuilder) SetInt(name string, value int64) { b.SetString(name, strconv.FormatInt(value, 10)) } func (b *QueryStringBuilder) SetInt32(name string, value int) { b.SetString(name, strconv.Itoa(value)) } func (b *QueryStringBuilder) SetFloat(name string, value float64) { b.SetString(name, strconv.FormatFloat(value, 'f', -1, 64)) } func (b *QueryStringBuilder) SetFloat32(name string, value float32) { b.SetString(name, strconv.FormatFloat(float64(value), 'f', -1, 32)) } // Encode returns the URL-encoded query string based on key-value // parameters added to the builder calling Set functions. func (b *QueryStringBuilder) Encode() string { return b.values.Encode() } // Encode returns the URL-encoded query string, prefixing it with the // input URL path. func (b *QueryStringBuilder) EncodeWithPath(path string) string { queryString := b.Encode() if path == "" { return queryString } else if queryString == "" { return path } return path + "?" + queryString }