Go 中如何按字典顺序排序 Map 并计算其 JSON 格式的 MD5 值,以与 PHP 保持一致?
go 中按字典顺序排序并以 json 格式转换 map 的 md5 值与 php 不一致
为了在 go 中按字典顺序对 map 进行排序,我们使用 go 标准库中的 sort 包。该代码还会将排序后的 map 转换为 json 格式,并计算其 md5 值。
import ( "bytes" "crypto/md5" "encoding/hex" "encoding/json" "fmt" "sort" ) func main() { params := map[string]string{ "name": "111", "domain": "www.baidu.com?name=1&id=1", } // 按键排序 keys := make([]string, len(params)) i := 0 for k := range params { keys[i] = k i++ } sort.Strings(keys) // 拼接排序后的 Map sortedParams := make([]string, len(params)) for i, k := range keys { sortedParams[i] = fmt.Sprintf(`"%s":"%s"`, k, params[k]) } sortedData := fmt.Sprintf("{%s}", strings.Join(sortedParams, ",")) // 计算 MD5 值 h := md5.New() h.Write([]byte(sortedData)) fmt.Println(hex.EncodeToString(h.Sum(nil))) }
通过使用 sort 包对按键进行字典顺序排序,并将结果拼接为一个字符串,计算得到的 md5 值与 php 一致。
以上就是Go 中如何按字典顺序排序 Map 并计算其 JSON 格式的 MD5 值,以与 PHP 保持一致?的详细内容,更多请关注www.sxiaw.com其它相关文章!