Go语言开发小技巧易错点100例(八)
往期回顾:
- Go语言开发小技巧&易错点100例(一)
- Go语言开发小技巧&易错点100例(二)
- Go语言开发小技巧&易错点100例(三)
- Go语言开发小技巧&易错点100例(四)
- Go语言开发小技巧&易错点100例(五)
- Go语言开发小技巧&易错点100例(六)
- Go语言开发小技巧&易错点100例(七)
本期看点(技巧类用【技】表示,易错点用【易】表示):
- JSON Marshal和Proto Marshal在Protobuf Message结构体上使用的不同【易】
- channel方式代替time.Sleep()方法【技】
正文开始:
JSON Marshal和Proto Marshal在gRPC Message上使用的不同
我们先定义一个Proto Buffer文件,内容为一个Message,有两个属性,其中一个属性为string类型,一个为onef类型:
syntax = "proto3";option go_package = "/test";package cmd;message UserInfo {string name = 1;oneof address {string school_addr = 2;string home_addr = 3;}
}
接下来我们编译成pb.go文件
protoc -I=. --go_out=.. ./hello.proto
具体编译后的结构体:
type UserInfo struct {state protoimpl.MessageStatesizeCache protoimpl.SizeCacheunknownFields protoimpl.UnknownFieldsName string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`// Types that are assignable to Address:// *UserInfo_SchoolAddr// *UserInfo_HomeAddrAddress isUserInfo_Address `protobuf_oneof:"address"`
}// ...type UserInfo_SchoolAddr struct {SchoolAddr string `protobuf:"bytes,2,opt,name=school_addr,json=schoolAddr,proto3,oneof"`
}// ...type UserInfo_HomeAddr struct {HomeAddr string `protobuf:"bytes,3,opt,name=home_addr,json=homeAddr,proto3,oneof"`
}
然后我们写两个测试方法:
方法一:JSON Marshl的方式序列化结构体
func TestJSONMarshal(t *testing.T) {u := UserInfo{Name: "zs",Address: &UserInfo_HomeAddr{HomeAddr: "Beijing"},}marshal, _ := json.Marshal(u)fmt.Println(string(marshal))var u2 UserInfo_ = json.Unmarshal(marshal, &u2)fmt.Println(u2)
}
结果:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jUlVgySx-1690033591008)(Go语言开发小技巧&易错点100例(八).assets/image-20230722211709041.png)]](https://img-blog.csdnimg.cn/104b05c13a9246c6903c71be043ed2fd.png)
方法二:Proto Marshal的方式序列化结构体
func TestProtoMarshal(t *testing.T) {u := UserInfo{Name: "zs",Address: &UserInfo_HomeAddr{HomeAddr: "Beijing"},}marshal, _ := proto.Marshal(u)fmt.Println(string(marshal))var u2 UserInfo_ = proto.Unmarshal(marshal, u2)fmt.Println(u2)
}
结果:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i5L9h37K-1690033591011)(Go语言开发小技巧&易错点100例(八).assets/image-20230722211642116.png)]](https://img-blog.csdnimg.cn/9c0856c5be0d473d8880598da2e7e430.png)
对比上述的结果,我们会发现有些不同:
- 序列化后的内容不同,JSON Marshal序列化后的内容可读性较高但是内容占用空间多
- 反序列化时Proto Marshal的方式能够自动识别oneof类型的属性
因此我们得出结论,在直接序列化Message时最好使用Proto Marshal的方式进行序列化,防止特殊的属性不能够识别,而且该序列化的方式更加节省空间,缺点则是序列化的结果可读性不高。
channel方式代替time.Sleep()方法
最新发现的新操作,直接上代码:
func TestSleep(t *testing.T) {<-time.After(time.Second) // 相当于time.Sleep(time.Second)}
本期到此结束~
相关文章:
Go语言开发小技巧易错点100例(八)
往期回顾: Go语言开发小技巧&易错点100例(一)Go语言开发小技巧&易错点100例(二)Go语言开发小技巧&易错点100例(三)Go语言开发小技巧&易错点100例(四)Go…...
100个网络安全测试面试题
1、Burpsuite常用的功能是什么? 2、reverse_tcp和bind_tcp的区别? 3、拿到一个待检测的站或给你一个网站,你觉得应该先做什么? 4、你在渗透测试过程中是如何敏感信息收集的? 5、你平时去哪些网站进行学习、挖漏洞提交到…...
7.26 作业 QT
1.继续完善登录框,当登录成功时,关闭登录界面,跳转到新的界面中: 结果图: second.h: #define SECOND_H#include <QWidget> #include<QDebug> //信息调试类,用于打印输出的 #inc…...
Python - Opencv应用实例之树叶自动分割、标签及统计分析系统
Python - Opencv应用实例之树叶自动分割、标签及统计分析系统 本文通过Python+opencv 实现这样的需求:输出位置和角度(x, y, r),并标记出轮廓基于传统图像处理算法实现,算法原理:输入图像 -> 灰度化 -> 二值化 -> 形态学处理 -> 轮廓提取 -> 树叶中心定位 -…...
IC设计工程师,参加IC面试应该注意哪些细节?
秋招已至,诸多IC设计企业,比如联发科、长鑫、大疆、燧原、地平线、复旦微、兆易创新、百度昆仑芯等,都已经陆续开启了提前批招聘。 很多人对各种关于秋招、面试、简历的比较感兴趣,所以今天就来跟大家分享关于秋招求职面试中的一…...
java poi导入Excel、导出excel
java poi导入Excel、导出excel 导出meven架包 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.1</version></dependency>导入Excel public void uploadFile(HttpServletRequ…...
【算法与数据结构】101、LeetCode对称二叉树
文章目录 一、题目二、递归法三、迭代法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、递归法 思路分析:这道题目标就是要对比左右两半的树是否对称,因此对比不是左右节点是否相等&…...
【N32L40X】学习笔记04-gpio中断库
gpio中断 该函数库的目的就是在统一的地方配置,将配置的不同项放置在一个结构体内部使用一个枚举来定义一个的别名 NVIC 寄存器 NVIC 相关的寄存器定义了可以在 core_cm4.h 文件中找到。我们直接通过程序的定义来分 析 NVIC 相关的寄存器,其定义如下…...
Godot 4 着色器 - Shader调试
我之前用OpenCV进行图像相关处理,觉得已经很不错,结合GDI可以实现流畅的动画效果 直到近来用Shader后才发现,着色器更上一层楼,原来这是入了GPU的坑 Shader编程限制很多,各种不支持,看在它性能不错功能炫…...
liunx时间慢几分钟,定时更新系统时间
#!/bin/sh hwclock --hctosys echo "执行成功" 定时5分钟执行一次...
C# 委托详解
一.委托的概念 C#中委托也叫代理,委托提供了后期绑定机制(官方解释),功能类似于C中的函数指针,它存储的就是一系列具有相同签名和返回类型的方法的地址,调用委托的时候,它所包含的所有方法都会被执行。 二.委托的用法…...
chatGPT 学习分享:内含PPT分享下载
InstructGPT论文地址: Training language models to follow instructions with human feedbackchatGPT地址:openAI个人整理的PPT(可编辑),下载地址:chatGPT学习分享PPT...
使用CRM进行数据分析的四大好处
使用CRM数据分析系统够帮助企业更好地了解客户需求和行为习惯,提供个性化的服务,从而提高客户满意度和忠诚度。使用CRM数据分析系统可以为企业带来一些好处,包括提高客户洞察力、加强营销策略、提高运营效率等。 1.提高客户洞察力:…...
Excel“牛人”变现方案参考
有几种方式可以通过Excel技能实现变现: 1. 提供Excel咨询和培训服务:如果你对Excel非常熟悉,你可以提供咨询和培训服务,帮助他人解决Excel使用中的问题或提高他们的Excel技能。 2. 制作和销售Excel模板:你可以根据市…...
vscode和jetbrains IDEA添加免费的gpt代码生成插件
vscode和jetbrains IDEA添加免费的gpt代码生成插件 VSCODE添加代码智能生成插件 一、打开vscode添加扩展 打开vscode,点击扩展,搜索 aws toolkit 二、连接到AWS 如图,选择添加connectiong to aws 选择 Sign up or Sign in …...
【C#】医学实验室云LIS检验信息系统源码 采用B/S架构
基于B/S架构的医学实验室云LIS检验信息系统,整个系统的运行基于WEB层面,只需要在对应的工作台安装一个浏览器软件有外网即可访问,技术架构:Asp.NET CORE 3.1 MVC SQLserver Redis等。 一、系统概况 本系统是将各种生化、免疫、…...
linux:AWS LightSail 设置虚拟内存
参考: https://www.cnblogs.com/fallin/p/13186236.html 总结: #2G的swap文件 sudo dd if/dev/zero of/swapfile bs1M count2048 sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo echo /swapfile none swap defaults 0 0 &g…...
“华为杯”研究生数学建模竞赛2016年-【华为杯】E题:粮食最低收购价问题研究
目录 摘 要: 第 1 章 前 言 1.1 研究的目的与意义 1.2 文献综述...
idea项目依赖全部找不到
目录 1,出错现象2,解决3,其他尝试 1,出错现象 很久没打开的Java项目,打开之后大部分依赖都找不到,出现了所有的含有import语句的文件都会报错和一些注解报红报错,但pom文件中改依赖是确实被引入…...
自动驾驶数据标注有哪些?
自动驾驶汽车:人工智能(AI)的焦点 人工智能驱动汽车解决方案的市场规模预计到 2025年将增长十倍以上,提升车内体验的商机领域以及 AI 模型的无偏见训练数据的重要性。在本篇中,我们将介绍车外体验的关键组成部分,以及自动驾驶数据…...
论文AI率过高怎么降?实测有效方法+免费工具推荐
当前不少学生和科研人员在写论文时都遇到过AIGC率超标的问题,不用焦虑,只要找对方法,就能有效消除AI生成痕迹,顺利通过学校的AIGC检测。 一、AIGC检测的核心逻辑是什么? 很多人会疑惑:明明是自己逐字敲的论…...
**发散创新:基于Python的轻量级知识推理引擎实现与实战**在人工智能飞速发展的今天,**知识推理**
发散创新:基于Python的轻量级知识推理引擎实现与实战 在人工智能飞速发展的今天,知识推理已成为构建智能系统的核心能力之一。它不仅支撑着推荐系统、问答机器人和语义搜索等场景,更是实现AI从“感知”向“理解”跃迁的关键路径。本文将带你…...
OpenClaw 从翻车到迎来上百项更新:MiniMax、腾讯、阿里、有道 8 位专家拆解OpenClaw本土化实战解法
责编 | 梦依丹出品 | CSDN(ID:CSDNnews)3 月 24 日,行业顶流 OpenClaw 在迎来号称自诞生以来的最大更新之后,却始料未及地上演了一段“装虾五分钟,修 Bug 两小时”的升级翻车大事故。由于强行将插件生态迁移…...
课堂行为及状态检测数据集11697张VOC+YOLO格式
课堂行为及状态检测数据集11697张VOCYOLO格式数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):11697 标注数量(xml文件个数):1169…...
Muon最佳实践:10个提升开发效率的实用技巧
Muon最佳实践:10个提升开发效率的实用技巧 【免费下载链接】muon GPU based Electron on a diet 项目地址: https://gitcode.com/gh_mirrors/mu/muon Muon作为一款基于GPU的轻量级Electron替代方案,采用Golang开发并使用Ultralight引擎࿰…...
ZYNQ调试别再傻等Program FPGA了!一个函数搞定PL端软复位(Vitis 2021.2)
ZYNQ高效调试:用软复位替代FPGA重编程的技术解析 调试ZYNQ项目时,最令人抓狂的莫过于每次修改代码后漫长的Program FPGA等待。作为一名长期与ZYNQ打交道的工程师,我深知这种重复操作不仅消耗时间,更会加速Flash芯片的老化。本文将…...
如何告别投稿焦虑:Elsevier Tracker智能监控插件的完整指南
如何告别投稿焦虑:Elsevier Tracker智能监控插件的完整指南 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 还在为Elsevier投稿系统的繁琐查询而烦恼吗?每次登录系统查看审稿进度都需要重复点…...
黑客用ChatGPT生成病毒:安全测试员的噩梦
当攻击进入“自动化”时代对于软件测试从业者而言,每一次技术革新都意味着测试对象、方法和工具的深刻变革。过去,我们面对的是由人类程序员编写的、逻辑相对固定的代码。然而,大语言模型(LLM)的兴起,特别是…...
探索iPad Pro的深度数据获取
在iOS开发中,获取深度数据是一个非常有趣的话题,特别是在使用双摄像头设备时。然而,当我们尝试将这些技术应用到iPad Pro上时,可能会遇到一些独特的挑战和限制。下面我们将深入探讨如何在iPad Pro上获取深度数据,以及为什么有些功能在iPad上不可用。 背景介绍 Apple在WW…...
告别复杂操作!Wan2.2-I2V-A14B一键生成480P高清视频
告别复杂操作!Wan2.2-I2V-A14B一键生成480P高清视频 1. 视频创作新体验:简单三步生成专业级视频 你是否曾经为制作一段简单的视频而头疼?传统视频制作需要学习复杂的剪辑软件,花费大量时间调整参数,甚至需要专业的拍…...
