Golang 的一些坑

Json.Marshal 的坑

json.Marshal() 说会把 & 等符号转义,可以通过设置 SetEscapeHTML(false) 来解决。示例代码:

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
)

func JSONMarshal(t interface{}) ([]byte, error) {
    buffer := &bytes.Buffer{}
    encoder := json.NewEncoder(buffer)
    encoder.SetEscapeHTML(false)
    err := encoder.Encode(t)
    return buffer.Bytes(), err
}

func main() {
    uri := "https://xxx.com/api?do=xxx&id=123"

    s, _ := json.Marshal(map[string]interface{}{"url": uri})

    s1, _ := JSONMarshal(map[string]interface{}{"url": uri})

    fmt.Println("json.Marshal:", string(s))
    fmt.Println("JSONMarshal:", string(s1))
}

// output
// json.Marshal(): {"url":"https://xxx.com/api?do=xxx\u0026id=123"}
// JSONMarshal(): {"url":"https://xxx.com/api?do=xxx&id=123"}

参考链接