• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go语言的例子(下)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

第一篇文章(大约半年前写的):https://www.cnblogs.com/cgzl/p/11246324.html

gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go语言的例子(上) 

接着上一篇文章。

 

首先写一个func:

在这里,使用了jsonpb里面的Marshaler这个struct,这个struct上有一个方法叫做MarshalToString,它可以把proto.Message类型转化为JSON字符串。

与此同时,需要添加引用,通常IDE会自动添加该引用。

 

然后修改main方法,添加两行代码:

 

运行 go run main.go:

打印到屏幕上到pmStr为:

  

下面查看一下jsonpb.Marshaler 的源码:

可以看到里面有几个属性,它们可以用来配置JSON转化。

 

我可以设置缩紧为一个tab:

 

然后再次执行go程序,结果如下:

 

而json里的这些属性名是怎么转化的呢?打开proto生成的go文件:

可以看到前4个属性的tags除了有protobuf的,后边还有json的,所以生成json的属性名等信息就来自这些tags。

 

从JSON读取

这里就是使用jsonpb.UnmarshalString这个方法,其余的都很简单就不解释了。

运行结果如下:

 

枚举的例子

在src下面建立second文件夹,里面建立enum.proto文件,

 

代码如下:

 

执行:protoc --proto_path=src/ --go_out=src/ src/second/enum.proto

生成的代码如下:

go里面没有枚举类型,所以生成的是const常量。

 

同时还生成了两个map:

一个是数值作为key,文字作为value,另一个map正好反过来。

 

再看一下这个消息本身的struct:

 

然后建立一个函数,并在main里面调用:

函数返回的是指针,然后在main函数里使用了Gender_name这个map,通过em.Gender的数值获取到对应到文字并输出。

 

运行结果如下:

 

复杂类型

在src下面建立third文件夹,并建立complex.proto文件:

可以看到DepartmentMessage里面到employees属性是EmployeeMessage的一个集合。

而且DepartmentMessage有一个parent_department属性,它的类型为本身。

 

执行:protoc --proto_path=src/ --go_out=src/ src/third/complex.proto

可以看到这生成的文件里面有俩个struct:

 

 

然后建立函数,并在main里面调用:

 注意这里面的指针。

 

输出结果是:

 

 

Go的例子就到这了。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go使用json包Marshal方法得到异常结果[123125]发布时间:2022-07-10
下一篇:
【Go】原子操作atomic.Value的使用发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap