首先写一个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的数值获取到对应到文字并输出。
运行结果如下: