1. 数据格式
- 是系统中数据交互不可缺少的内容
- 这里主要介绍JSON、XML、MSGPack
- json是完全独立于语言的文本格式,是k-v的形式 name:zs
- 应用场景:前后端交互,系统间数据交互
- json使用go语言内置的encoding/json 标准库
- 编码json使用json.Marshal()函数可以对一组数据进行JSON格式的编码
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Hobby string
}
func main() {
p := Person{"5lmh.com", "女"}
// 编码json
b, err := json.Marshal(p)
if err != nil {
fmt.Println("json err ", err)
}
fmt.Println(string(b))
// 格式化输出
b, err = json.MarshalIndent(p, "", " ")
if err != nil {
fmt.Println("json err ", err)
}
fmt.Println(string(b))
struct tag
type Person struct {
//"-"是忽略的意思
Name string `json:"-"`
Hobby string `json:"hobby" `
}
示例通过map生成json
- 解码json使用json.Unmarshal()函数可以对一组数据进行JSON格式的解码
func Unmarshal(data []byte, v interface{}) error
import (
"encoding/json"
"fmt"
)
type Person struct {
Age int `json:"age,string"`
Name string `json:"name"`
Niubility bool `json:"niubility"`
}
func main() {
// 假数据
b := []byte(`{"age":"18","name":"5lmh.com","marry":false}`)
var p Person
err := json.Unmarshal(b, &p)
if err != nil {
fmt.Println(err)
}
fmt.Println(p)
}
示例解析到interface
- 是可扩展标记语言,包含声明、根标签、子元素和属性
- 应用场景:配置文件以及webService
<?xml version="1.0" encoding="UTF-8" ?>
<servers version="1">
<server>
<serverName>Shanghai_VPN</serverName>
<serverIP>127.0.0.1</serverIP>
</server>
<serverName>Beijing_VPN</serverName>
<serverIP>127.0.0.2</serverIP>
</server>
</servers>
import (
"encoding/xml"
"fmt"
"io/ioutil"
)
// 抽取单个server对象
type Server struct {
ServerName string `xml:"serverName"`
ServerIP string `xml:"serverIP"`
}
type Servers struct {
Name xml.Name `xml:"servers"`
Version int `xml:"version"`
Servers []Server `xml:"server"`
}
func main() {
data, err := ioutil.ReadFile("D:/my.xml")
if err != nil {
fmt.Println(err)
return
}
var servers Servers
err = xml.Unmarshal(data, &servers)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("xml: %#v\n", servers)
}
- 需要安装第三方包:go get -u github.com/vmihailenco/msgpack