go使用grpc实现go与go,go与C#相互调用

news2025/1/18 8:59:54

protoc下载

protoc是protobuf的编译工具,能根据.proto文件生成为各种语言的源文件。
原始的protoc集成了如下语言的转换:

  • c++
  • c#
  • java
  • objectc
  • php
  • python
  • ruby
    但是没有集成go的转换工具。go的转换工具是在protoc的基础上使用插件的方式运行。
    protoc 的下载地址:https://github.com/protocolbuffers/protobuf/releases
    在这里插入图片描述
    我是在window上开发的,所以选择protoc-21.9-win64.zip
    下载之后解压:
    在这里插入图片描述
    在bin的目录下存在protoc.exe:
    在这里插入图片描述
    protoc.exe的路径加入到系统环境变量:
    在这里插入图片描述

验证protoc是否安装完成:
打开控制台输入:

protoc --version

出现如下输出,表示安装完成:
在这里插入图片描述

protoc-gen-go安装

前面说到,原始的protoc不包含go语言的源文件生成。要根据.proto文件生成go语言的代码文件,必须使用protoc和插件protoc-gen-go
protoc-gen-go的安装使用如下命令:

go install github.com/golang/protobuf/protoc-gen-go@latest

安装之后,会在%USERPROFILE%\go\bin如下目录生成一个protoc-gen-go.exe文件:
在这里插入图片描述

.proto文件转换为.go文件

在proto文件的目录下,输入如下指令来生成go文件:

protoc --go_out=plugins=grpc:. *.proto

在这里插入图片描述

编写go语言的服务端和客户端

本示例想实现一个客户端和服务端相互通讯聊天的例子实现如下:

  • 客户端可以任意时刻给服务端发消息
  • 服务端可以任意时刻给客户端发消息
  • 客户端发送消息只有服务端能收到
  • 服务端发送消息,所有的客户端都能收到

定义.proto文件

syntax="proto3";

//注意这里不要写错
option go_package="./;testpb";

message CallRequest{
    string data=1;
}
message CallResponse{
    string data=1;
}

service TestService{
    rpc CallEachOther (CallRequest) returns (CallResponse);
}

项目的结构

在这里插入图片描述

其中protos是client和server共用的proto文件以及生成的.proto文件。

根据.proto文件生成.go文件

打开集成终端:

在这里插入图片描述

进入到protos目录:
cd protos

输入如下指令:

protoc --go_out=plugins=grpc:. *.proto

可以看到生成了test.pb.go文件:
在这里插入图片描述

更改test.pb.go的包名为protos

在这里插入图片描述

go服务端开发

初始化module

go mod init testserver

定义test_service

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux NC命令的本质

NC是一个可以模拟tcp,udp,server,client 的协议, 1-它可以实现两个主机的聊天 server: nc -lp 1234 client : nc 192.168.1.10 1234 以上两个命令就可以实现实时数据传输了,是不是很有意思,但是这个是怎么实现的呢&am…

软考信息安全工程师必会--3000+字文章浅析DES加密算法

目录 前言 什么是DES加密算法 整体流程 IP置换 子密钥K 压缩置换1 循环左移 拓展置换2 拓展置换E S盒代替 S1盒 S2盒 S3盒 S4盒 S5盒 S6盒 S7盒 S8盒 P盒置换 末置换 前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS…

flink1.10中三种数据处理方式的连接器说明

第一种 Streaming&#xff08;DataStream API&#xff09; 流式处理的所有的连接器如上图&#xff0c;常用的是kafka、Elasticsearch、Hadoop FileSystem Kafka连接器 依赖 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connec…

2022-11-21 mysql列存储引擎-架构实现缺陷梳理-P1

1. 前言 发现和指出问题为了&#xff1a;更好的解决问题和避免问题的再次发生 项目在演进&#xff0c;代码不停地在堆砌。如果代码的质量一直不被重视&#xff0c;代码总是会往越来越混乱的方向演进。当混乱到一定程度之后&#xff0c;量变引起质变&#xff0c;项目的维护成本…

二叉树和堆

二叉树和堆什么是树树的一些专业术语树的表示二叉树的概念什么是二叉树特殊的二叉树二叉树的性质堆的概念堆的表示方式堆的实现堆的初始化及销毁堆的插入堆的删除堆的判空与获取堆顶元素堆的主要应用堆排序利用堆数据结构建堆利用向上调整算法来建堆利用向下调整算法建堆TopK问…

计算机毕业设计——校园二手市场

一.项目介绍 系统包含 普通用户 和 管理员 两种角色 普通用户 浏览其他用户发布的二手物品&#xff0c;修改个人信息、查看订单&#xff08;买的、卖的&#xff09;、 发布闲置、查看我的闲置、查看我的关注、跳转后台、更改用户名等功能 管理员用户登录 操作用户管理、商品管理…

中学物理教学参考杂志社中学物理教学参考编辑部2022年第21期目录

前沿导航_课改在线《中学物理教学参考》投稿&#xff1a;cn7kantougao163.com 问题导向式学习 提升学生思维品质——以“自由落体运动”教学为例 汪欣; 1-2 物理实验探究式复习模式研究——以“机械能守恒定律”为例 王栋; 3-4 初中物理作业设计类型及其实施策略 马…

阿里8年测试经验,手工测试转变为自动化测试,送给正在迷茫的你

前言 随着软件测试技术的发展&#xff0c;人们已经从最初的纯粹的手工测试转变为手工与自动化测试技术相结合的测试方法。近年来&#xff0c;自动化测试越来越受到人们的重视&#xff0c;对于自动化测试的研究也越来越多。 项目版本功能日趋增加&#xff0c;系统模块越来越多…

2009-2013、2018-2020计算机网络考研408真题

文章目录2009年选择综合应用2010年选择综合应用2011年选择综合应用2012年选择综合应用2009年 选择 在OSI参考模型中&#xff0c;自下而上第一个提供端到端服务的层次是……。 A.数据链路层 B.传输层 C.会话层 D.应用层 考查OSI模型中传输层的功能。 传输层提供应用进程间的逻辑…

3-3、python中内置数据类型(集合和字典)

文章目录集合集合的创建集合的特性集合的常用操作增加删除查看练习-对集合的排序frozenset 不可变的集合字典字典的创建字典的特性字典的常用方法查看增加和修改删除遍历字典 &#xff08;for&#xff09;defaultdict默认字典&#xff08;给字典设置默认值&#xff09;内置数据…

echarts+vue实现柱状图分页显示

非常感谢这篇博客&#xff1a;ECharts柱状图分页显示&#xff08;数据循环&#xff09;_s小布丁的博客-CSDN博客 大家好&#xff0c;我是南宫&#xff0c;很久没有更新博客了。 本文参考了这篇博客里面的思路和分割数据的代码&#xff0c;不过我用的是vue页面&#xff0c;后面…

【Kubernetes系列】工作负载资源之Deployment

文章目录概述Deployment用例创建 DeploymentDeployment 状态更新 Deployment回滚 DeploymentDeployment 规约Pod 模板副本选择算符策略进度期限秒数最短就绪时间修订历史限制paused&#xff08;暂停的&#xff09;概述 Deployment 很适合用来管理你的集群上的无状态应用&#…

数据结构--不定长顺序表

1.不定长顺序表 与定长顺序表相比不定长顺序表的区别在于我们可以通过扩容来进行增添元素的存储单元。 2.结构 是对定长顺序表的一种改进&#xff0c;在初始时开辟内存被利用完后&#xff0c;还要继续插入数据时&#xff0c;这时候据需要扩容。故顺序表的结构设计就要发生变…

BHQ-1羧酸是一种黑暗淬灭剂BHQ-1 acid,1190431-95-8

英文名称&#xff1a;BHQ-1 acid 中文名称&#xff1a;BHQ-1酸 丁酸&#xff0c;4-[[4-[2-[2-甲氧基-5-甲基-4-[2-&#xff08;4-甲基-2-硝基苯基&#xff09;二氮基]苯基]二氮基]苯基]甲氨基]- 分子量&#xff1a;504.55 化学式&#xff1a;C26H28N6O5 CAS&#xff1a;119…

8. 微服务之消息队列RabbitMQ以及五种消息队列模式

8.1 同步调用 即客户端向服务端请求做数据处理&#xff0c;客户端需要一直等待服务端处理直到返回结果给客户端 同步调用存在的问题&#xff1a; 耦合度高&#xff1a;每次加入新的需求&#xff0c;都要修改原来的代码性能下降&#xff1a;调用者需要等待服务提供者响应&…

C++模拟OpenGL库——图形学状态机接口封装(二):基于状态机接口的画线画三角形

目录 画线操作 画三角形操作 按区间取点来进行绘制 加入纹理 画线操作 上次我们定义了一系列状态机接口&#xff0c;并遗留了&#xff1a; void Canvas::gtDrawArray(DRAW_MODE _mode, int _first, int _count) 没有去实现&#xff0c;这次对他进行一个实现&#xff0c;…

计算机网络-传输层(TCP协议特点和TCP报文段格式,TCP连接管理)

文章目录1. TCP协议特点&#xff0c;报文段格式2. TCP连接管理1. TCP协议特点&#xff0c;报文段格式 TCP是面向连接&#xff08;虚连接&#xff09;的传输层协议每一条TCP连接只能有两个端点&#xff0c;每一条TCP连接只能是点对点的。TCP提供可靠交付的服务&#xff0c;无差…

代码随想录61——额外题目【数组】:1365有多少小于当前数字的数字、941有效的山脉数组、1207独一无二的出现次数

文章目录1.1365有多少小于当前数字的数字1.1.题目1.2.解答2.941有效的山脉数组2.1.题目2.2.解答3.1207独一无二的出现次数3.1.题目3.2.解答1.1365有多少小于当前数字的数字 参考&#xff1a;代码随想录&#xff0c;1365有多少小于当前数字的数字&#xff1b;力扣题目链接 1.1…

MySQl(六):日志

Mysql&#xff1a;日志日志错误日志二进制日志查询日志慢查询日志事务日志日志 错误日志 Linux 实时查看尾部内容 创建一个错误&#xff0c;进入log去看 二进制日志 查询日志 慢查询日志 事务日志 数据库都具有事务日志&#xff0c;用于记录所有事务以及每个事务对数据库所做…

IAST技术进阶系列(五):共生进化,自适应云原生

伴随着云计算带来的基础设施变革以及应用技术架构的转变&#xff0c;云原生和云原生应用已经成为耳熟能详的词汇。Gartner预测&#xff0c;到2025年&#xff0c;云原生平台将成为95%以上新数字化计划的基础。伴随云原生场景的普及&#xff0c;云原生应用将引领下一个应用时代&a…