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

  1. Go语言内置的crypto/md5标准库

  2. ```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 进行验签。