go使用grpc实现go与go,go与C#相互调用
Posted lishuangquan1987
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go使用grpc实现go与go,go与C#相互调用相关的知识,希望对你有一定的参考价值。
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
以上是关于go使用grpc实现go与go,go与C#相互调用的主要内容,如果未能解决你的问题,请参考以下文章
go语言使用go-sciter创建桌面应用 事件处理,函数与方法定义,go与tiscript之间相互调用
Go语言入门篇-gRPC基于golang & java简单实现