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的例子就到这了。
gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go语言的例子(下)的更多相关文章
- gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go语言的例子(上)
上一篇文章(大约半年前写的):https://www.cnblogs.com/cgzl/p/11246324.html 建立Go项目 在GOPATH的src下面建立一个文件夹 protobuf-go, ...
- gRPC in ASP.NET Core 3.x -- Protocol Buffer(3)更新消息类型
当你第一次定义Protocol Buffer的消息的时候,你肯定会给消息设定一套规则需求.但是随着时间的推进,你的业务可能会发生了变化,与此同时,你的Protocol Buffer消息类型的需求也会随 ...
- gRPC in ASP.NET Core 3.0 -- Protocol Buffer(1)
现如今微服务很流行,而微服务很有可能是使用不同语言进行构建的.而微服务之间通常需要相互通信,所以微服务之间必须在以下几个方面达成共识: 需要使用某种API 数据格式 错误的模式 负载均衡 ... 现在 ...
- gRPC在 ASP.NET Core 中应用学习(二)
前言: 上一篇文章中简单的对gRPC进行了简单了解,并实现了gRPC在ASP.NET Core中服务实现.客户端调用:那么本篇继续对gRPC的4中服务方法定义.其他使用注意点进一步了解学习 一.gRP ...
- gRPC in ASP.NET Core 3.x - gRPC 简介
gRPC的结构 在我们搭建gRPC通信系统之前,首先需要知道gRPC的结构组成. 首先,需要一个server(服务器),它用来接收和处理请求,然后返回响应. 既然有server,那么肯定有client ...
- 【无私分享:ASP.NET CORE 项目实战(第三章)】EntityFramework下领域驱动设计的应用
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在我们 [无私分享:从入门到精通ASP.NET MVC] 系列中,我们其实也是有DDD思想的,但是没有完全的去实现,因为并不是 ...
- ASP.NET Core 数据保护(Data Protection 集群场景)【下】
前言 接[中篇],在有一些场景下,我们需要对 ASP.NET Core 的加密方法进行扩展,来适应我们的需求,这个时候就需要使用到了一些 Core 提供的高级的功能. 本文还列举了在集群场景下,有时候 ...
- gRPC在 ASP.NET Core 中应用学习
一.gRPC简介: gRPC 是一个由Google开源的,跨语言的,高性能的远程过程调用(RPC)框架. gRPC使客户端和服务端应用程序可以透明地进行通信,并简化了连接系统的构建.它使用HTTP/2 ...
- 在ASP.NET Core Web API 项目里无法访问(wwwroot)下的文件
解决办法:在“ Startup.cs ” 文件里的 Configur方法里添加一句代码“ app.UseStaticFiles() ”,这样就可以访问wwwroot下的文件了. - 方法代码是: - ...
随机推荐
- Synchronized解析——如果你愿意一层一层剥开我的心
前言 synchronized,是解决并发情况下数据同步访问问题的一把利刃.那么synchronized的底层原理是什么呢?下面我们来一层一层剥开它的心,就像剥洋葱一样,看个究竟. Synchroni ...
- vue iView table中render渲染
<template> <div class="srm-page"> <el-form ref="form" :model=&quo ...
- 小程序中button标签的open-type属性
open-type (微信开放能力):合法值中的其中之一: getUserInfo 说明:引导用户授权 而获取用户信息,可以从bindgetuserinfo回调中获取到用户信息 而按钮的bi ...
- Microsoft Visual Studio提示正忙如何解决
打开项目的时候会一直提示正在加载,然后卡死,点击VS界面即出现下如图- 如图: 解决方法: 1.打开项目 找到一个叫vs的文件夹, 2.找到一个后缀是.suo的文件 把它删掉 3.关闭VS进程 重新打 ...
- Akka Java 文档 -- 容错
[转自: http://blog.csdn.net/zjw10wei321/article/details/46911825] 容错 实际中的故障处理 容错案例图解 容错案例所有源码 创建新的监管策略 ...
- springcloud复习1
1.SpringCloud是什么?SpringCloud=分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶. 2.SpringCloud和SpringBoot是什 ...
- 基于iTextSharp的PDF操作(PDF打印,PDF下载)
基于iTextSharp的PDF操作(PDF打印,PDF下载) 准备 1. iTextSharp的简介 iTextSharp是一个移植于java平台的iText项目,被封装成c#的组件来用于C#生成P ...
- Django 数据库连接缓存的坑
https://www.cnblogs.com/xcsg/p/11446990.html
- 一行代码去掉Devexpress弹窗
使用的是.net hook方法: 使用代码: using System; using System.Windows.Forms; namespace AlexDevexpressToolTest { ...
- JSON解析值富文本
解析前端传递的JSON数据中可能如下 { "result": "<input value="Test" type="button&qu ...