Golang学习笔记16:JSON与Md5
Go语言之JSON与Md5
一、JSON
1. JSON序列化包
JSON : Go语言内置的encoding/json标准库
实现JSON序列化,但性能不是很好,特别是在量比较大的情况下。
非内置的JSON 包, github.com/pquerna/ffjson/ffjson 更快性能更好,用go get 命令下载。
两个包的用法是一样的。
2. 基本使用
JSON编码:
func Marshal(v interface{}) ([]byte,error)
可以对任何类型进行编码interface{}
, 返回一个数组和是否出错的消息。
JSON解码:
func Unmarshal(data []byte , v interface{}) error
3.编码解码示例
json编码
对数组类型的json编码:
package main
import (
"encoding/json"
"fmt"
)
func main() {
//对数组类型的json编码
x := [5]int{1,2,3,4,5}
s , err := json.Marshal(x)
if err != nil {
panic(err)
}
fmt.Println(string(s))
}
输出结果:
[1,2,3,4,5]
进程 已完成,退出代码为 0
对map类型进行json编码
package main
import (
"encoding/json"
"fmt"
)
func main() {
//对数组类型的json编码
x := [5]int{1,2,3,4,5}
s , err := json.Marshal(x)
if err != nil {
panic(err)
}
fmt.Println(s)
fmt.Println(string(s))
//对map类型
m := make(map[string] float64)
m["zhangsan"] = 100.4
s2, err2 := json.Marshal(m)
if err2 != nil {
panic(err2)
}
fmt.Println(s2)
fmt.Println(string(s2))
}
输出结果:
[91 49 44 50 44 51 44 52 44 53 93]
[1,2,3,4,5]
[123 34 122 104 97 110 103 115 97 110 34 58 49 48 48 46 52 125]
{"zhangsan":100.4}
进程 已完成,退出代码为 0
对队象进行json编码
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Name string
age int
}
func main() {
//对数组类型的json编码
x := [5]int{1,2,3,4,5}
s , err := json.Marshal(x)
if err != nil {
panic(err)
}
fmt.Println(s)
fmt.Println(string(s))
//对map类型进行json编码
m := make(map[string] float64)
m["zhangsan"] = 100.4
s2, err2 := json.Marshal(m)
if err2 != nil {
panic(err2)
}
fmt.Println(s2)
fmt.Println(string(s2))
//对对象进行json编码
student := Student{"zhangsan" , 26}
s3 , err3 := json.Marshal(student)
if err3 != nil {
panic(err3)
}
fmt.Println(string(s3))
}
输出结果:
[91 49 44 50 44 51 44 52 44 53 93]
[1,2,3,4,5]
[123 34 122 104 97 110 103 115 97 110 34 58 49 48 48 46 52 125]
{"zhangsan":100.4}
{"Name":"zhangsan"}
进程 已完成,退出代码为 0
只输出了Name的类型,因为age是小写的。
在struct中,如果类型开头是小写,则说明在json encode的时候不想导出,如age
。
也可以在struct中改名。
type Student struct {
Name string `json:"student_name"`
age int
}
结果会变成:{"student_name":"zhangsan"}
json解码
//对s3进行json解码
var s4 interface{}
json.Unmarshal([]byte(s3), &s4)
fmt.Printf("%v" , s4)
输出结果:
// {"Name":"zhangsan","Age":26}
map[Age:26 Name:zhangsan]
进程 已完成,退出代码为 0
二、MD5
Go语言内置的crypto/md5标准库
```go
Md5Inst := md5.New()
Md5Inst.Write([]byte(“test md5”))
Result := Md5Inst.Sum([]byte(“”))
fmt.Printf(“%x\n\n” , Result)### MD5使用示例 ```go import ( "crypto/md5" "fmt" ) func main() { Md5Inst := md5.New() Md5Inst.Write([]byte("test md5")) Result := Md5Inst.Sum([]byte("")) fmt.Println( Result) fmt.Println( string(Result)) fmt.Printf("%x\n\n" , Result) }
输出结果:
[14 78 59 38 129 232 147 28 6 122 35 197 131 200 120 213]
N;&��z#�x�
0e4e3b2681e8931c067a23c583c878d5
进程 已完成,退出代码为 0
MD5是不可逆的,使用的时候可以用函数封装一下。接口之间也可以通过MD5 进行验签。
http://hackerwu.cn/2021/10/02/Golang%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B016%EF%BC%9AJSON%E4%B8%8EMd5/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 赛 の 任意门!
评论
ValineGitalk