项目文件夹

文件
杭州明婳科技 0f13292a46 GLM 5.2修改版
2026-07-02 18:26:27 +08:00

84 行
1.7 KiB
Go

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
package utils
import (
"net/url"
)
// URLBuilder URL 构建器
type URLBuilder struct {
u *url.URL
query url.Values
}
// ParseURL 解析 URL 字符串
func ParseURL(rawURL string) (*URLBuilder, error) {
u, err := url.Parse(rawURL)
if err != nil {
return nil, err
}
return &URLBuilder{
u: u,
query: u.Query(),
}, nil
}
// AddQuery 添加单个查询参数
func (b *URLBuilder) AddQuery(key, value string) *URLBuilder {
b.query.Add(key, value)
return b
}
// AddQueries 批量添加查询参数(追加,同 key 多值共存,M2 修复:原实现用 Set 会覆盖)。
// params 为 nil 时无操作(遍历 nil map 安全,不 panic)。
func (b *URLBuilder) AddQueries(params map[string]string) *URLBuilder {
for k, v := range params {
b.query.Add(k, v)
}
return b
}
// SetQuery 设置查询参数(覆盖同名参数)
func (b *URLBuilder) SetQuery(key, value string) *URLBuilder {
b.query.Set(key, value)
return b
}
// SetPath 设置路径
func (b *URLBuilder) SetPath(path string) *URLBuilder {
b.u.Path = path
return b
}
// SetScheme 设置协议(http/https
func (b *URLBuilder) SetScheme(scheme string) *URLBuilder {
b.u.Scheme = scheme
return b
}
// SetHost 设置主机
func (b *URLBuilder) SetHost(host string) *URLBuilder {
b.u.Host = host
return b
}
// Build 构建最终的 URL
func (b *URLBuilder) Build() *url.URL {
b.u.RawQuery = b.query.Encode()
return b.u
}
// String 返回 URL 字符串
func (b *URLBuilder) String() string {
return b.Build().String()
}
// URLEncode URL 编码
func URLEncode(s string) string {
return url.QueryEscape(s)
}
// URLDecode URL 解码
func URLDecode(s string) (string, error) {
return url.QueryUnescape(s)
}