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之间相互调用

gRPC双向数据流的交互控制(go语言实现)

Go语言入门篇-gRPC基于golang & java简单实现

[go]grpc远程接口调用实现

每天进步一点点:go基于grpc构建微服务框架-服务注册与发现

go-chassis 为 grpc-go 带来高级云原生特性