go json解析结构体
最近在做实验时,遇到了数据传输格式问题,节点之间的通信使用Socket,数据使用JSON格式进行传输,但是当数据有多种不同类型时,解析时会很麻烦,无意间看到了官方文档的示例(如果消息类型比较少,可以采用这种方法),因此记录一下解决方法。
目前做的实验为共识算法的实验,在实验中,主要有以下两种不同类型的消息,Prepare
,Commit
,节点发送消息,其它节点接收到消息之后解析,为了避免冗余的代码,可以定义一个结构体IncomingMessage
来解析不同类型的消息,由于还需要根据不同的消息类型执行不同的命令,可以通过判定IncomingMessage
中的Field
是否为nil
来执行响应的命令。
在发送端,如果要发送Prepare
消息,那么只需在IncomingMessage
的Pre
字段中填入相关信息,把Com
设为nil
即可,如果要发送Commit
消息,那么只需在IncomingMessage
的Com
中填入相关信息,把Pre
设为nil
即可。
代码示例
package mainimport ("encoding/json""fmt""log"
)type Prepare struct {Phase string `json:"Phase"`Tx []int `json:"Tx"`
}type Commit struct {Phase string `json:"Phase"`Tx string `json:"Tx"`
}type IncomingMessage struct {Pre *PrepareCom *Commit
}func main() {tx := []int{1, 2, 3, 4, 5, 6}p := IncomingMessage{&Prepare{Phase: "Prepare",Tx: tx,},nil,}b, err := json.Marshal(p)if err != nil {log.Fatal(err)}fmt.Println(string(b))var in IncomingMessageerr = json.Unmarshal(b, &in)if err != nil {log.Fatal(err)}fmt.Println(in)if in.Pre != nil {fmt.Println(in.Pre.Phase)fmt.Println(in.Pre.Tx)}if in.Com != nil {fmt.Println(in.Com)} else {fmt.Println("Com is nil.")}
}
go json解析结构体相关推荐
- Qt_C++JSON转结构体
文章目录[隐藏] Qt_C++++JSON 转结构体前言 Qt_C++++JSON 转结构体需求说明 Qt_C++++JSON 转结构体代码说明 Qt_C++++JSON 转结构体最终实现效果 Qt_ ...
- C语言实现Json与结构体相互转换——cson
https://github.com/sunchb/cson.git 目录 前言 示例 实现 1.实现"反射" 1.1.描述结构体属性 1.2.访问结构体属性 1.3.结构体属性赋 ...
- json 潜逃 结构体_JSON还原为结构体 - osc_t5zhwnvx的个人空间 - OSCHINA - 中文开源技术交流社区...
JSON还原为结构体 1)JSON字符串还原为结构体: 2)访问结构体的字段值: 本例运行效果图: uses SynCommons; const // JSON字符串 JSON1 = '{' + #1 ...
- json 潜逃 结构体_JSON还原为结构体
JSON还原为结构体 1)JSON字符串还原为结构体: 2)访问结构体的字段值: 本例运行效果图: uses SynCommons; const // JSON字符串 JSON1 = '{' + #1 ...
- 【C语言】深度探索offsetof,解析结构体的成员数组和指针
目录 一.offsetof的功能 二.自定义offsetof 三.探索结构体 3.1结构体中的成员 3.2结构体指针和数组 该篇博客主要讲了自定义offsetof是如何实现的,为什么要这样写,以此沿生 ...
- golang json转结构体中嵌套多个数组_ElasticSearch第六篇:复合数据类型-数组,对象...
在ElasticSearch中,使用JSON结构来存储数据,一个Key/Value对是JSON的一个字段,而Value可以是基础数据类型,也可以是数组,文档(也叫对象),或文档数组,因此,每个JSON ...
- go语言json字符串解析为结构体数组,结构体指针的数组
废话不多说直接上效果图 完整代码如下 package main import ("encoding/json""fmt" ) // 结构体定义 type rob ...
- python解析C/C++结构体二进制数据
一.引言 socket为数据通信中必不可少的一部分,常用的有TCP数据传输协议和UDP数据传输协议.(具体的socket详情这里不赘述). 不论是TCP还是UDP,凡是涉及到数据传输,都需要进行数据内 ...
- go var type 互转_Go语言学习笔记(第九章) 结构体
Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go 通过类型别名(alias types)和结构体的形式支持用户自定义 ...
最新文章
- Eclipse运行时无法加载主类的解决方法
- 坐姿绳索划船 - 坐姿器械划船动作图解教程
- servlet基础知识
- jzoj3910-Idiot的间谍网络【倍增,dfs】
- matlab 排序点,matlab如何进行排序?
- Linux下coredump调试3:补录
- asp.net mvc项目中遇到的古怪的问题,(项目中有frame框架)
- Chrome的插件扩展程序安装目录是什么?在哪个文件夹?
- 可视化管理_供应链可视化管理作用与现状分析
- 计算机乐谱吃鸡,Capo可自动识别音乐生成乐谱
- 三维扫描用于3D打印技术
- Nvidia jetson tx2 ubuntu16.04插入128GB内存卡报错:Unable to access/mount “128 GB Volume”
- Qt 快速利用qt designer Layout绘制GUI界面
- 5-5中央处理器-指令流水线
- OpenCV(Python)颜色识别(一)
- android movie 资源释放,Android 资讯类App项目实战 第四章 电影模块
- ipad可以使用其他品牌的手写笔吗?apple pencil一代平替笔
- 机器学习(三) 线性回归
- 【python】python每天抓取一篇英语美文,发送到邮箱
- β-甲酰基-5,10,15,20-四苯基卟啉镍[NiTPP(CHO)];meso 四(2,5 二氟苯基)卟啉(T(2,5 DFP)P);meso-四(4-甲基-3-磺酸苯基)卟啉[T(4-MP)PS4