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
}

 

posted @   创客未来  阅读(1179)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示