Go语言学习笔记之序列化与反序列化
序列化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package main import ( "encoding/json" "fmt" ) type User struct { Name string `json: "用户名" ` //反射机制 Age int `json: "年龄" ` Sex string `json: "性别" ` } func json_Struct() { u:=User{ "Jack" ,23, "男" } data,err:=json.Marshal(&u) if err!=nil{ fmt.Println( "出错!" ) return } fmt.Printf( "序列化后=%v\n" , string(data)) } func json_Map(){ mp:= map [string]int{ "Jack" :21, "Amy" :23, "David" :89, } data,err:=json.Marshal(&mp) if err!=nil{ fmt.Println( "出错!" ) } fmt.Println(string(data)) } func json_Slice(){ arr:=[] map [string] interface {}{ { "jack" :21},{ "tom" :23},{ "Mg" :24}, } data,err:=json.Marshal(&arr) if err!=nil{ fmt.Println( "出错!" ) } fmt.Println(string(data)) } func main() { json_Struct() json_Map() json_Slice() arr:=[...]int{1,2,3,4} data,err:=json.Marshal(&arr) if err!=nil{ fmt.Println( "出错!" ) } fmt.Println(string(data)) } |
反序列化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | package main import ( "fmt" "encoding/json" ) //定义一个结构体 type Monster struct { Name string Age int Birthday string //.... Sal float64 Skill string } //演示将 json 字符串,反序列化成 struct func unmarshalStruct() { //说明 str 在项目开发中,是通过网络传输获取到.. 或者是读取文件获取到 str := "{\"Name\":\"牛魔王\",\"Age\":500,\"Birthday\":\"2011-11-11\",\"Sal\":8000,\"Skill\":\"牛魔拳\"}" //定义一个 Monster 实例 var monster Monster err := json.Unmarshal([]byte(str), &monster) if err != nil { fmt.Printf( "unmarshal err=%v\n" , err) } fmt.Printf( "反序列化后 monster=%v monster.Name=%v \n" , monster, monster.Name) } //演示将 json 字符串,反序列化成 map func unmarshalMap() { str := "{\"address\":\"洪崖洞\",\"age\":30,\"name\":\"红孩儿\"}" //定义一个 map var a map [string] interface {} //反序列化 //注意:反序列化 map,不需要 make,因为 make 操作被封装到 Unmarshal 函数 err := json.Unmarshal([]byte(str), &a) if err != nil { fmt.Printf( "unmarshal err=%v\n" , err) } fmt.Printf( "反序列化后 a=%v\n" , a) } //演示将 json 字符串,反序列化成切片 func unmarshalSlice() { str := "[{\"address\":\"北京\",\"age\":\"7\",\"name\":\"jack\"}," + "{\"address\":[\"墨西哥\",\"夏威夷\"],\"age\":\"20\",\"name\":\"tom\"}]" //定义一个 slice var slice [] map [string] interface {} //反序列化,不需要 make,因为 make 操作被封装到 Unmarshal 函数 err := json.Unmarshal([]byte(str), &slice) if err != nil { fmt.Printf( "unmarshal err=%v\n" , err) } fmt.Printf( "反序列化后 slice=%v\n" , slice) } func main() { unmarshalStruct() unmarshalMap() unmarshalSlice() } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码