1. 数据格式

    • 是系统中数据交互不可缺少的内容
    • 这里主要介绍JSON、XML、MSGPack
    • json是完全独立于语言的文本格式,是k-v的形式 name:zs
    • 应用场景:前后端交互,系统间数据交互

    • json使用go语言内置的encoding/json 标准库
    • 编码json使用json.Marshal()函数可以对一组数据进行JSON格式的编码
    1. import (
    2. "encoding/json"
    3. "fmt"
    4. )
    5. type Person struct {
    6. Name string
    7. Hobby string
    8. }
    9. func main() {
    10. p := Person{"5lmh.com", "女"}
    11. // 编码json
    12. b, err := json.Marshal(p)
    13. if err != nil {
    14. fmt.Println("json err ", err)
    15. }
    16. fmt.Println(string(b))
    17. // 格式化输出
    18. b, err = json.MarshalIndent(p, "", " ")
    19. if err != nil {
    20. fmt.Println("json err ", err)
    21. }
    22. fmt.Println(string(b))

    struct tag

    1. type Person struct {
    2. //"-"是忽略的意思
    3. Name string `json:"-"`
    4. Hobby string `json:"hobby" `
    5. }

    示例通过map生成json

    • 解码json使用json.Unmarshal()函数可以对一组数据进行JSON格式的解码
    1. func Unmarshal(data []byte, v interface{}) error
    1. import (
    2. "encoding/json"
    3. "fmt"
    4. )
    5. type Person struct {
    6. Age int `json:"age,string"`
    7. Name string `json:"name"`
    8. Niubility bool `json:"niubility"`
    9. }
    10. func main() {
    11. // 假数据
    12. b := []byte(`{"age":"18","name":"5lmh.com","marry":false}`)
    13. var p Person
    14. err := json.Unmarshal(b, &p)
    15. if err != nil {
    16. fmt.Println(err)
    17. }
    18. fmt.Println(p)
    19. }

    示例解析到interface

    • 是可扩展标记语言,包含声明、根标签、子元素和属性
    • 应用场景:配置文件以及webService
    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <servers version="1">
    3. <server>
    4. <serverName>Shanghai_VPN</serverName>
    5. <serverIP>127.0.0.1</serverIP>
    6. </server>
    7. <serverName>Beijing_VPN</serverName>
    8. <serverIP>127.0.0.2</serverIP>
    9. </server>
    10. </servers>
    1. import (
    2. "encoding/xml"
    3. "fmt"
    4. "io/ioutil"
    5. )
    6. // 抽取单个server对象
    7. type Server struct {
    8. ServerName string `xml:"serverName"`
    9. ServerIP string `xml:"serverIP"`
    10. }
    11. type Servers struct {
    12. Name xml.Name `xml:"servers"`
    13. Version int `xml:"version"`
    14. Servers []Server `xml:"server"`
    15. }
    16. func main() {
    17. data, err := ioutil.ReadFile("D:/my.xml")
    18. if err != nil {
    19. fmt.Println(err)
    20. return
    21. }
    22. var servers Servers
    23. err = xml.Unmarshal(data, &servers)
    24. if err != nil {
    25. fmt.Println(err)
    26. return
    27. }
    28. fmt.Printf("xml: %#v\n", servers)
    29. }
    • 需要安装第三方包:go get -u github.com/vmihailenco/msgpack