写点什么

Go- 数据格式解析

用户头像
HelloBug
关注
发布于: 2021 年 09 月 08 日
Go- 数据格式解析

Go 学习笔记,学习内容《Go入门指南》


主要介绍以下内容:

  • Json 格式解析

  • Xml 格式解析

  • Gob 格式解析


代码示例可以直接运行


Json 格式解析

package main
import ( "encoding/json" "fmt" "log" "os")
func printDivider(str ...string) { fmt.Println() fmt.Println("-----------------------------------------------") if len(str) > 0 { fmt.Println(str) }}
type Address struct { Type string City string Country string}
type VCard struct { FirstName string LastName string Addresses []*Address Remark string}
func main() { /* json包的使用 Go类型与JSON对应如下: bool booleans float64 numbers string strings nil null
复杂类型、函数类型、Channel不能进行Json编码 指针可以被编码,是对指针的值进行编码 */
/* 使用Marshal进行编码 */ printDivider("") pa := &Address{"private", "Hanzhou", "China"} wa := &Address{"work", "Shanghai", "China"} vc := VCard{"Jan", "Wang", []*Address{pa, wa}, "none"}
js, _ := json.Marshal(vc) // 将一个数据结构构造成json字符串 fmt.Printf("JSON format: %s\n", js)
/* 使用Marshal进行编码 */ file, _ := os.OpenFile("vcard.json", os.O_CREATE|os.O_WRONLY, 0666) defer file.Close() enc := json.NewEncoder(file) err := enc.Encode(vc) if err != nil { log.Println("Error in encoding json") }
/* 使用Unmarshal进行解码 */ printDivider("使用Unmarshal进行解码") b := []byte(`{"Name": "Wednesday", "Age": 6, "Parents": ["Gomez", "Morticia"]}`) var f interface{} err = json.Unmarshal(b, &f) m := f.(map[string]interface{}) for k, v := range m { fmt.Println(k, v) } fmt.Println("********************************") for k, v := range m { switch vv := v.(type) { case string: fmt.Println(k, " = ", v) case float64: fmt.Println(k, " = ", v) case []interface{}: fmt.Println(k, " = ") for i, u := range vv { fmt.Println(i, u) } default: fmt.Println(k, " is a x type") } }}
复制代码


Xml 格式解析

package main
import ( "encoding/xml" "fmt" "strings")
var t, token xml.Tokenvar err error
func main() { input := "<Person><FirstName>Laura</FirstName><LastName>Lynn</LastName></Person>" inputReader := strings.NewReader(input) p := xml.NewDecoder(inputReader)
for t, err = p.Token(); err == nil; t, err = p.Token() { switch token := t.(type) { case xml.StartElement: name := token.Name.Local fmt.Printf("Token name: %s\n", name) for _, attr := range token.Attr { attrName := attr.Name.Local attrValue := attr.Value fmt.Printf("An attribute is: %s %s\n", attrName, attrValue) } case xml.EndElement: fmt.Println("End of token") case xml.CharData: content := string([]byte(token)) fmt.Printf("This is the content : %v\n", content) } }}
复制代码


Gob 格式解析

package main
import ( "bytes" "encoding/gob" "fmt" "log")
type P struct { X, Y, Z int Name string}
type Q struct { X, Y *int32 Name string}
func main() { var network bytes.Buffer enc := gob.NewEncoder(&network) dec := gob.NewDecoder(&network)
err := enc.Encode(P{3, 4, 5, "It'me"}) if err != nil { log.Fatal("encode error: ", err) }
var q Q err = dec.Decode(&q) if err != nil { log.Fatal("Decode error: ", err) } fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y)}
复制代码


发布于: 2021 年 09 月 08 日阅读数: 4
用户头像

HelloBug

关注

还未添加个人签名 2018.09.20 加入

还未添加个人简介

评论

发布
暂无评论
Go- 数据格式解析