Go URL Encode Mastery: Solve Encoding Errors Easily and Code Securely
path := "/doc/价格表.pdf" fmt.Println(url.PathEscape(path)) // 输出:/doc/%E4%BB%B7%E6%A0%BC%E8%A1%A8.pdf fmt.Println(url.QueryEscape(path)) // 输出:%2Fdoc%2F%E4%BB%B7%E6%A0%BC%E8%A1%A8.pdf
params.Set("category", "智能家居") params.Set("price", "100-500") fmt.Println(params.Encode()) // 输出:category=%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85&price=100-500
params := url.Values{} params.Add("order", "2024 VIP套餐") fmt.Println(params.Encode()) // order=2024+VIP%E5%A5%97%E9%A4%90
// 错误做法:直接拼接字符串 signStr := fmt.Sprintf("amount=%d&order=%s", 100, "2024 Order") // 当订单号含空格时出现编码差异
// 正确做法:使用url.Values标准化 params := url.Values{} params.Add("amount", "100") params.Add("order", "2024 Order") keys := make([]string, 0, len(params)) for k := range params {
keys = append(keys, k)
} sort.Strings(keys) // 参数名排序防篡改 signStr := params.Encode() // 自动编码为order=2024+Order