Golang 結構體、map、切片的序列化


1.結構體序列化

package main

import (
    "encoding/json"
    "fmt"
)

//定義一個結構體
type Monster struct {
    Name string
    Age int
    Birthday string
    Sal float64
    skill string
}
func testStruct(){
    monster := Monster{
        Name : "牛魔王",
        Age : 500,
        Birthday : "2021-11-11",
        Sal : 80000.0,
        skill : "牛魔拳",
    }
    //將monster 序列化
    data, err :=json.Marshal(&monster)
    if err !=nil{
        fmt.Printf("序列化錯誤 err=%v\n",err)
    }
    //輸出序列化結果
    fmt.Printf("manster序列化后=%v",string(data))
}
func main(){
    //演示結構體序列化
    testStruct()
}

 

 2.map序列化

package main

import (
    "encoding/json"
    "fmt"
)

//將map進行序列化
func testMap() {
    //定義一個Map
    var a map[string]interface{}
    //使用map,需要make
    a = make(map[string]interface{})
    a["name"] = "紅孩兒"
    a["age"] = 30
    a["address"] = "火雲洞"
    //將a這個map進行序列化
    data, err := json.Marshal(a)
    if err != nil {
        fmt.Printf("序列化錯誤 err=%v", err)
    }
    //輸出序列化后的結果
    fmt.Printf("monster序列化后=%v\n", string(data))
}
func main() {
    //演示map序列化
    testMap()
}

 

 3.slice切片序列化

package main

import (
    "encoding/json"
    "fmt"
)

//對切片進行序列化,我們這個切片 []map[string]interface{}
func testSlice() {
    var slice []map[string]interface{}
    var m1 map[string]interface{}
    //使用map前需要make
    m1 = make(map[string]interface{})
    m1["name"] = "jack"
    m1["age"] = "7"
    m1["address"] = "北京"
    slice = append(slice, m1)

    var m2 map[string]interface{}
    //使用map前需要make
    m2 = make(map[string]interface{})
    m2["name"] = "tom"
    m2["age"] = "20"
    m2["address"] = "上海"
    slice = append(slice, m2)

    data, err := json.Marshal(slice)
    if err != nil {
        fmt.Printf("序列化錯誤 err=%v", err)
    }
    //輸出序列化后的結果
    fmt.Printf("slice序列化后的結果=%v\n", string(data))
}
func main() {
    testSlice()
}

4.結構體序列化得tag標簽

定義結構體的屬性是大寫的字母,但有些時候序列化后需要是小寫的,這時候不能修改結構體的屬性為小寫,因為在序列化的操作是挎包操作,小寫字母不是可導出的。利用 tag標簽解決此問題.

正常情況下,你定義的結構體是這樣子的,每個字段都由名字和字段類型組成

//定義一個結構體
type Monster struct {
    Name     string 
    Age      int    
    Birthday string
    Sal      float64
    skill    string
}

用反引號(Esc鍵下面的那個鍵)包含的字符串,稱之為 Tag,也就是標簽。

//定義一個結構體
type Monster struct {
    Name     string `json:"monster_name"`
    Age      int    `json:"monster_age"`
    Birthday string
    Sal      float64
    skill    string
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM