Go: 序列化与反序列化
Go的序列化
特性
Go通过结构体标签来支持序列化和反序列化,内置的encoding标准库支持xml/json等配置文件的序列化和反序列化gopls本身支持json结构体标签的快速生成Go只会对一个结构体的公有字段进行序列化和反序列化
API
- 通过
encoding下的子包encoding/xml或encoding/json的API Marshal(v any) ([]byte, error):将任意值序列化,返回字节数组MarshalIndent(v any) ([]byte, error):类似Marshal()但是会提供缩进美化Unmarshal(data []byte, v any) error:反序列化,v应当是指针
xml-etree
beevik/etree是用于解析xml的第三方库
yaml
- 需要借助第三方库
go-yaml/yaml - 用法与
encoding API一致,只不过yaml是严格缩进的,因此没有MarshalIndent() - 切片和
yaml数组对应 - 一个结构体会将
yaml的子属性和公有字段对应,只收集匹配成功的,会忽略无法匹配的项,若没有配置则使用零值赋值 - 一个
map会将所有该字段下的子字段全部收集起来,收集到和值类型相匹配的,如果存在和值类型不匹配的字段则报错
protobuf
- 需要借助第三方库
github.com/golang/protobuf/proto