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


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

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

    接着上一篇文章。

    写入到JSON

    首先写一个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的例子就到这了。

  • 相关阅读:
    jQuery $.each用法
    JSON.parse()和JSON.stringify()
    创建对象,初始化对象属性,给节点分派一个合成事件
    javascript 兼容W3c和IE的添加(取消)事件监听方法
    tomcat发布后项目classes下无编译文件
    纯css实现计数器效果
    js点击元素输出对应的index
    鼠标滚轮监听防“抖动”
    原生dom的querySelector、querySelectorAll方法
    spring mvc 通过url传来的参数乱码的解决方法
  • 原文地址:https://www.cnblogs.com/cgzl/p/12298524.html
Copyright © 2020-2023  润新知