go gprc 使用 教程
技术栈
grpc
go
protobuff
go语言中文文档:www.topgoer.com
1.环境1.1. 安装protoc项目地址 https://github.com/protocolbuffers/protobuf
下载protobuff, 有条件的github上直接下载,github下载地址,或者可以从maven仓库下载
在maven仓库中找到对应的版本,进行下载,linux ,windows 都有

1589089027209.png
这里我下载 windows 64 位的这个
下载下来的是可执行文件,直接放到环境变量里面,这个文件名太长了,把后缀都去掉
我放的路径 %GOPATH%\bin\protoc.exe
1.2. 安装 protoc-gen-go直接go get -u github.com/golang/protobuf/protoc-gen-go
go get 的比较慢的话可以用代理。需要配置下代理。
看下 %GOPATH%\bin\ 有没有protoc-gen-go.exe ,没有的话需要找到下载的包进行安装。
下载目录在:%GOPATH%\pkg\mod\github.com\golang\protobuf@xxx\protoc-gen-go
进入目录然后 go install ,然后再去看bin 目录就会生成protoc-gen-go.exe

1589090845985.png
2. 建项目实践1. 建目录 gr***rjgo mod init gr***rj
这个是我创建后的目录

2. 编写proto文件

消息体可以嵌套,也可以引入其他的proto文件

字段类型对比
.proto TypeGo Type说明doublefloat64floatfloat32int32int32使用变长编码,对于负值的效率很低,如果你的域有可能有负值,请使用sint64替代uint32uint32使用变长编码uint64uint64使用变长编码sint32int32使用变长编码,这些编码在负值时比int32高效的多sint64int64使用变长编码,有符号的整型值。编码时比通常的int64高效。fixed32uint32总是4个字节,如果数值总是比总是比228大的话,这个类型会比uint32高效。fixed64uint64总是8个字节,如果数值总是比总是比256大的话,这个类型会比uint64高效。sfixed32int32总是4个字节sfixed64int64总是8个字节boolbool默认 falsestringstring一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本,默认值为空。bytes[]byte默认是空数组
3. 编译proto文件proto 文件编写完毕以后,使用protoc 进行编译,编译成成 xxx.pb.go,编译是干什么呢?
protoc --go_out=plugins=grpc:. proto/hello/hello.proto
运行命令后会在 proto 文件同目录生成 xxx.pb.go,对应的service 会成生成一个空的实现(指的是只做了实现,并没有具体业务功能),这里需要注意的是,默认go环境变量已经配置正确,gopath\bin 在环境变量里面。
hello.proto(最简的)

编译后的文件

4. 实现服务端接口逻辑
服务端可以实现,也可以不实现,也可以改下上面的默认生成的这个实现类,这里重新实现了下,里面写自己的业务逻辑。
server/handler/hello.go(最简实现)

5. 服务端代码

6. 客户端代码
protoc 生成的go 代码里面包括服务端的定义,和客户端的定义(协议的打包,解包都包括了)
gr***rj/client/hello.go
