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

第一篇文章(大约半年前写的):http://www.javashuo.com/article/p-yssafgti-mk.htmlhtml

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

接着上一篇文章。函数

 

写入到JSON

首先写一个func:jsonp

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

与此同时,须要添加引用,一般IDE会自动添加该引用。3d

 

而后修改main方法,添加两行代码:指针

 

运行 go run main.go:htm

打印到屏幕上到pmStr为:blog

  

下面查看一下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的例子就到这了。

原文出处:https://www.cnblogs.com/cgzl/p/12298524.html

相关文章
相关标签/搜索