Go语言中序列化与反序列化示例详解

Go语言中序列化与反序列化示例详解

目录

前言

序列化

array、slice、map、struct对象

序列化的接口

反序列化

slice、map、struct反序列化

总结

前言

Go语言的序列化与反序列化在工作中十分常用,在Go语言中提供了相关的解析方法去解析JSON,操作也比较简单

序列化 // 数据序列化 func Serialize(v interface{})([]byte, error) // fix参数用于添加前缀 //idt参数用于指定你想要缩进的方式 func serialization (v interface{}, fix, idt string) ([]byte, error) array、slice、map、struct对象 //struct import ( "encoding/json" "fmt" ) type Student struct { Id int64 Name string Desc string } func fn() { std := &Student{0, "Ruoshui", "this to Go"} data, err := json.MarshalIndent(std, "", " ") if err != nil { fmt.Println(err) } fmt.Println(string(data)) } //array、slice、map func fc() { s := []string{"Go", "java", "php"} d, _ := json.MarshalIndent(s, "", "\t") fmt.Println(string(d)) m := map[string]string{ "id": "0", "name":"ruoshui", "des": "this to Go", } bytes, _ := json.Marshal(m) fmt.Println(string(bytes)) } 序列化的接口

在json.Marshal中,我们会先去检测传进来对象是否为内置类型,是则编码,不是则会先检查当前对象是否已经实现了Marshaler接口,实现则执行MarshalJSON方法得到自定义序列化后的数据,没有则继续检查是否实现了TextMarshaler接口,实现的话则执行MarshalText方法对数据进行序列化

MarshalJSON与MarshalText方法虽然返回的都是字符串,不过MarshalJSON方法返回的带引号,MarshalText方法返回的不带引号

//返回带引号字符串 type Marshaler interface { MarshalJSON() ([]byte, error) } type Unmarshaler interface { UnmarshalJSON([]byte) error } //返回不带引号的字符串 type TextMarshaler interface { MarshalText() (text []byte, err error) } type TextUnmarshaler interface { UnmarshalText(text []byte) error } 反序列化 func Unmarshal(data [] byte, arbitrarily interface{}) error

该函数会把传入的数据作为json解析,然后把解析完的数据存在arbitrarily中,arbitrarily是任意类型的参数,我们在用此函数进行解析时,并不知道传入参数类型所以它可以接收所有类型且它一定是一个类型的指针

slice、map、struct反序列化 //struct type Student struct { Id int64 `json:"id,string"` Name string `json:"name,omitempty"` Desc string `json:"desc"` } func fn() { str := `{"id":"0", "name":"ruoshui", "desc":"new Std"}` var st Student _ = json.Unmarshal([]byte(str), &st) fmt.Println(st) } //slice和map func f() { slice := `["java", "php", "go"]` var sli []string _ = json.Unmarshal([]byte(slice), &sli) fmt.Println(sli) mapStr := `{"a":"java", "b":"node", "c":"php"}` var newMap map[string]string _ = json.Unmarshal([]byte(mapStr), &newMap) fmt.Println(newMap) } 总结

到此这篇关于Go语言中序列化与反序列化的文章就介绍到这了,更多相关Go序列化与反序列化内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    电脑硬盘csgo凭空消失|csgo突然消失

    电脑硬盘csgo凭空消失|csgo突然消失,,1. csgo突然消失可能是系统出现卡顿,刷新一下重启试试2. csgo地图突然消失方法如下:1、在电脑中启动cs

    csgo参数设置|csgo怎么保存

    csgo参数设置|csgo怎么保存,,csgo怎么保存第一步下载csgo的官方版本。然后再下载一个5e对战平台,PS:5e的账号和csgo的账号不是一个账号。第

    aigo无线硬盘连电脑|aigo优盘连接手机

    aigo无线硬盘连电脑|aigo优盘连接手机,,1. aigo优盘连接手机不管是爱国者U盘还是其他的U盘,要导入华为手机的话,首先需要有一个转接头,一头插

    csgo高手快捷键|csgo快捷键指令

    csgo高手快捷键|csgo快捷键指令,,1. csgo快捷键指令反恐精英全球攻势游戏中,死亡竞赛的回合时间60分钟:mp_roundtime 60,休闲/竞技模式的每局

    aigo电脑主机系统重启|csgo重启电脑

    aigo电脑主机系统重启|csgo重启电脑,,csgo重启电脑如果重启成功应该是不需要,相反就需重新安装csgo重启电脑重连不上直接打开游戏,通过游戏

    csgo电脑等级|csgo电脑等级指令

    csgo电脑等级|csgo电脑等级指令,,csgo电脑等级指令如图:竞技匹配等级另外还有每打一局都加经验的那个等级是满级为40,满了之后可兑换赛季纪

    csgo设置准星|csgo设置准星大小

    csgo设置准星|csgo设置准星大小,,csgo设置准星大小csgo怎么设置准星方法:1.打开CSGO游戏,打开创意工坊,查找crashz' Crosshair Generator v2

    duolingo电脑版|Duolingo软件

    duolingo电脑版|Duolingo软件,,Duolingo软件1.百词斩:2.英语流利说:“英语流利说”是一款融合创新口语教学理念和尖端语音评估技术的英语口