当前位置: 首页 > news >正文

网站建设管理系统网页制作基础教程试卷

网站建设管理系统,网页制作基础教程试卷,大连建设工程网站,智能建造考研方向往期回顾: Go语言开发小技巧&易错点100例(一)Go语言开发小技巧&易错点100例(二)Go语言开发小技巧&易错点100例(三)Go语言开发小技巧&易错点100例(四)Go…

往期回顾:

  • 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)]

方法二: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)]

对比上述的结果,我们会发现有些不同

  • 序列化后的内容不同,JSON Marshal序列化后的内容可读性较高但是内容占用空间多
  • 反序列化时Proto Marshal的方式能够自动识别oneof类型的属性

因此我们得出结论,在直接序列化Message时最好使用Proto Marshal的方式进行序列化,防止特殊的属性不能够识别,而且该序列化的方式更加节省空间,缺点则是序列化的结果可读性不高。

channel方式代替time.Sleep()方法

最新发现的新操作,直接上代码:

func TestSleep(t *testing.T) {<-time.After(time.Second) // 相当于time.Sleep(time.Second)}

本期到此结束~

http://www.bjxfkj.com.cn/article/107529.html

相关文章:

  • 天津企业网络建站影视怎么建设网站
  • 网站网站建设公司上海有没有网站
  • 做php门户网站那个系统好网站优化排名的方法
  • 网站开发网站设计制作做视频的背景音乐哪里下载网站
  • 大庆建设银行网站首页成功的营销网站
  • 网站建设包括网页设计宁波网站制作流程
  • 手机网站制作案例做网站好的公司有哪些
  • 佛山大型网站设计公司中卫网站推广优化
  • 自己做网站 什么软件卖东西专业网站网上
  • 发布到wordpress网站seo案例
  • 网站开发教学网站厦门做网站seo
  • 网站建设淘宝走流程做网上营销怎样推广
  • 建一个com网站要多少钱带后台的网站开发运营成本
  • 拿品牌做网站算侵权吗网站设计与建设ppt
  • 怎么做网站模板wordpress固定导航
  • 孝感网济南百度推广排名优化
  • 个人 网站备案 幕布全国企业信息网查询平台官网
  • 怎么查看网站是哪个公司建的semseo
  • 手机制作网站软件衡水提供网站制作公司哪家好
  • 长春建站优化济南市网站推广公司
  • 网站建设厃金手指花总十一WordPress移动端加搜索框
  • 计算科学与学习网站建设与实施长沙科技有限公司
  • 天津做网站排名新出的app推广在哪找
  • 长春做网站好的公司现在什么类型网站没有人做
  • 网站关键字及说明数字重庆公司
  • 专业做高校网站群管理系统上海网站建设目的
  • 怎么创建手机网站网站空间升级通知
  • 做母婴的网站猪八戒网站开发合同
  • 广州好的网站建设wordpress 下载失败
  • 冷饮网站开发背景意义如何做发表文章的网站