笔者,最近公司有一个项目采用go来编写,而通信是与java服务端的netty 进行socket 通信,而通信的接口结构是用protobuf 来进行定义的,目前网上好多关于go 的protobuf 的使用,但是在安装proto的包,和go的protobuf 生成go代码工具都不行(很大原因是新版本更新了,导致原来的地址或者路径不对导致),故重新整理一下,希望能帮助到大家,自己也是参考proto 官网整理出来的
1.安装protobuf 工具- 进行官网进行protobuf 工具下载(这里以windows为例),如下图选择对应的系统和语言,go的话,直接选择系统即可。
- 下载完成以后,如果是windows 系统,则把protobuf 的bin 目录下的 protoc.exe 拷贝到 go 的安装目录下的 bin 目录
执行安装proto-gen-go 的插件:
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
该命令会在 GOPATH 目录下的 bin 中安装 生成工具: protoc-gen-go.exe
3. 生成proto.pb.go 文件先跳转到 rcs 目录下,然后执行命令:
我的目录层级是:
src
proto
xxxxa.proto
xxxxb.proto
proto.pb
xxxxa.pb.go
xxxxb.pb.go
执行生成proto.pb.go 的go文件:
// protoc -I=源proto文件目录 --go_out=生成的 proto.pb.go 文件所在目录中(具体还要结合proto文件中的go_packge 目录来共同定义) 源proto文件路径(相对于当前所在目录) protoc -I=. --go_out=proto.pb proto/*.proto
最后文件就会生成到proto.pb 的目录下了,注意:在proto文件中的必须这个配置,结合命令才不会有问题:具体说明一下protoc -I 的中 : --go_out=path 与 proto 文件中的 go_package 中的配置的关系:
--go_out=path , 中的path , 它表示的是以当前命令所有的路径为起点,进行路径的跳转,而proto 文件中的 go_package 中的内容分为二段,以分号间隔 eg: ../proto.pb;proto
其中蓝色的第一段 ../proto.pb 表示 在(当前命令中为起点+之前--go_out=path 中的path) 为起点
也就是说,生成的xxxxa.pb.go 文件的会在 这个目录下: ./path/../proto.pb/xxxxa.pb.go
而第二段的绿色块:proto, 表示生成的xxxxa.pb.go 文件的包名是 proto
// [开始 go 选项配置] option go_package = "../proto.pb;proto"; // [结束 go 选项配置]
关于go 与 java 的netty 服务端进行socket 通信,笔者会有下一篇单独介绍: go 与java netty 之间的通信实现



