十分钟学会Golang开发gRPC服务1

简介: 十分钟学会Golang开发gRPC服务1

gRPC是Google发起的一个开源RPC框架,使用HTTP/2传输协议,使用Protocol Buffers编码协议,相比RESTful框架的程序性能提高不少,而且当前流行的编程语言基本都已经支持。

Golang开发gRPC应用程序的套路也已经很清晰,这篇文章就来做一个简单的介绍,算是入门。


1、安装protoc


这个工具也称为proto编译器,可以用来生成各种开发语言使用proto协议的代码。

下载地址:github.com/protocolbuf…

一般下载最新版本就行,注意要符合自己当前的操作系统。

1689142012581.png

解压后里边有个 protoc.exe ,拷贝到 GOPATH 的 bin 目录下,我这里就是 C:/Users/PC-001/go/bin ,PC-001 是登录当前操作系统的用户名,需要换成你自己的。GOPATH 可以通过执行 go env 查看到。

1689142046515.png

一般都是把 GOPATHbin 目录添加到环境变量的 PATH 变量中,如果没有,请自行添加上。


2、安装protoc的Golang gRPC插件


执行如下命令,会在 GOPATHbin 目录下生成两个可执行文件:protoc-gen-go.exe 和 protoc-gen-go-grpc.exe。这两个插件可以用来生成Golang版本的proto协议代码和gRPC代理代码。

go install google.golang.org/protobuf/cmd/protoc-gen-go
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc


3、编写proto文件


proto文件是符合Protocol Buffers语言规范的数据交换协议文件,就像以前WebService定义服务时使用的XML文件。现在一般都是用proto3了,这里创建一个名为 hello.proto 的文件,放到项目的proto目录下:

syntax = "proto3";
option go_package="/proto";
package Business;
service Hello {
  rpc Say (SayRequest) returns (SayResponse);
}
message SayResponse {
  string Message = 1;
}
message SayRequest {
  string Name = 1;
}

这个协议很简单,有个名字为Hello的服务,提供一个名字为Say的rpc方法,这个方法有输入输出,输入信息中有一个名为Name的参数,输出信息中有一个名为Message的返回值。


4、生成gRPC代理代码


在项目根目录中执行如下命令,会在proto目录下生成两个文件:hello.pb.go 和 hello_grpc.pb.go。

protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative proto/hello.proto

hello.pb.go 中是输入输出数据类型的Golang定义,hello_grpc.pb.go 中是客户端和服务端的gRPC代理类型和方法的Golang定义。

也可以将文件生成到别的目录中,比如修改 proto 文件中 go_package 的配置为:

option go_package="/business";

然后执行下面的命令,会生成到项目下的business目录中:

protoc --go_out=.  --go-grpc_out=. proto/hello.proto
相关文章
|
3月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
112 3
Golang语言之gRPC程序设计示例
|
3月前
|
Go API
Golang语言开发注意事项
这篇文章总结了Go语言开发中的注意事项,包括语法细节、注释使用、代码风格、API文档的利用以及如何使用godoc工具来生成文档。
44 2
|
4月前
|
监控 测试技术 API
|
4月前
|
监控 Serverless Go
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
|
4月前
|
Java Serverless Go
Golang 开发函数计算问题之在 Golang 中避免 "concurrent map writes" 异常如何解决
Golang 开发函数计算问题之在 Golang 中避免 "concurrent map writes" 异常如何解决
|
4月前
|
Serverless Go
Golang 开发函数计算问题之defer 中的 recover() 没有捕获到 如何解决
Golang 开发函数计算问题之defer 中的 recover() 没有捕获到 如何解决
|
5月前
|
监控 Go
golang开发 gorilla websocket的使用
【7月更文挑战第11天】在Golang中, 使用Gorilla WebSocket库可轻松实现WebSocket通信。安装库: `go get github.com/gorilla/websocket`。创建连接: `websocket.DefaultDialer.Dial("ws://url", nil)`。发送消息: `conn.WriteMessage(websocket.TextMessage, []byte("Hello"))`。接收消息: 循环调用`conn.ReadMessage()`。适用于实时聊天或股票行情等场景。
134 0
|
6月前
|
Go 开发工具 C语言
从零开始使用golang开发
【6月更文挑战第17天】本文介绍 Go 语言安装与配置等操作。包括.下载与安装从[Go官网](https://golang.org/dl/)下载对应平台的安装包,安装时可自定义路径。安装验证,使用 `go version` 检查版本。环境配置和变量设置,包管理等
63 1
|
3月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
140 4
Golang语言之管道channel快速入门篇
|
3月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
71 4
Golang语言文件操作快速入门篇