序列化 struct 时 tag 的使用 | 学习笔记

简介: 快速学习序列化 struct 时 tag 的使用

开发者学堂课程【Go语言核心编程 - 面向对象、文件、单元测试、反射、TCP编程序列化 struct 时 tag 的使用】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9739


序列化 struct 时 tag 的使用

 

一、序列化的补充

对结构体序列化完成时,把结构体字段名字作为 key,值为 val,字段名字有可能不满足需求,如在 web 中 go 服务器将结构体序列化后传入浏览器,浏览器向 jQuery 进行解析,浏览器也就是客户端通常希望 key 值都保持小写

1.注意事项

对于结构体的序列化,如果希望序列化后的 key 的名字,自己重新制定,可以给 struct 指定一个 tag 标签.

image.png

//定义一个结构体

type Monster struct {

Name string `json:"monster_name"´//反射机制

Age int `json:"monster_age"`

Birthday string 77....

Sal float64

skill string

序列化后:

{"monster_name":"牛魔","monster_age":500,"Birthday":"2011-11-11","'Sal":8000,"Skil":"牛魔拳"}

有人想将 Name 直接改完 monster_name 完全不可以,因为结构体进行序列化时用的是 marshal,json 是另外一个包,在 marshal 函数里使用字段跨包函数的,使用首字母小写为私有的,是不可导出的字段,在序列化时会报错,所以不可以直接写首字母小写的字段。

将 Name 改为 monster_name 测试结果

type  Monster struct {

monster name string  

Age int

Birthday string //...

sal float64

skill string

func teststruct(){

//演示

monster  :=  Monster{

monster_name :"牛魔王  

Age :500

Birthday:"2011-11-11",  

Sal:8000.0

skill:"牛魔拳",

//将monster序列化

data, err :=  json. Marshal(&monster) //...  

if err !=nil{

fmt.Printf("序列号错误  err=%v\n",  err)

//输出序列化后的结果

fmt.Printf("monster 序列化后=%v\n",string(data))

序列化后虽然没有报错但是 monster_name 消失,因为 marshal 做了判断,可导出进行处理,不可导出不做处理

monster_name 在 mashal 中应用反射机制替换 Name

相关文章
|
Java Maven
JAVA反序列化学习笔记4.Commons Collections2分析
JAVA反序列化学习笔记4.Commons Collections2分析
|
安全 Java
JAVA反序列化学习笔记3.Commons Collections5分析
JAVA反序列化学习笔记3.Commons Collections5分析
|
安全 Java
JAVA反序列化学习笔记2.Commons Collections1分析
JAVA反序列化学习笔记2.Commons Collections1分析
java202303java学习笔记第三十七天序列化流1
java202303java学习笔记第三十七天序列化流1
43 0
|
存储 缓存 分布式计算
Structured_介绍_序列化更迭 | 学习笔记
快速学习 Structured_介绍_序列化更迭
Structured_介绍_序列化更迭 | 学习笔记
|
消息中间件 JSON Java
RabbitTemplate 发送接受消息& amp 序列化机制|学习笔记
快速学习 RabbitTemplate 发送接受消息& amp 序列化机制
484 0
RabbitTemplate 发送接受消息& amp 序列化机制|学习笔记
|
JSON 网络协议 测试技术
反序列化介绍和应用实例 | 学习笔记
快速学习反序列化介绍和应用实例
反序列化介绍和应用实例 | 学习笔记
|
XML JSON 前端开发
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
541 0
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
|
存储 JSON 编解码
06、Netty学习笔记—(聊天业务优化:扩展序列化算法)
06、Netty学习笔记—(聊天业务优化:扩展序列化算法)
06、Netty学习笔记—(聊天业务优化:扩展序列化算法)
|
消息中间件 JSON 缓存
RedisTemplate&amp 序列化机制|学习笔记
快速学习 RedisTemplate&amp 序列化机制
158 0