使用protobuf
protoc
下载protobuf的编译器protoc地址:https://github.com/google/protobuf/releases把protoc.exe复制到GOPATH/bin下,GOPATH/bin加入环境变量
protoc-gen-go
go get github.com/golang/protobuf/protoc-gen-go
protoc-gen-gogo
和protoc-gen-go生成的文件差不多,性能也几乎一样(稍微快一点点)go get -u github.com/golang/protobuf/protoc-gen-gogo
protoc-gen-gofast
生成的文件更复杂,性能也更高(快5-7倍)go get -u github.com/golang/protobuf/protoc-gen-gofast注:这里我选用gofast
安装gogoprotobuf库文件
go get github.com/gogo/protobuf/proto
生成go文件
命令 protoc -I=path1 --gofast_out=path2 *.proto-I:由于proto中可能是多协议间互相引用的关系,所以要加上-I,这样生成时会引用其它协议path1:为生成时,需要引用的文件的路径--gofast_out:指定生成go文件的存放路径path2:生成go文件的存放路径*.proto:当前文件夹下所有的.proto全都生成示例bat:protoc -I=./ --gofast_out=./pb_go *.proto
pause
示例结构 示例说明:结构下有5个协议,其中http.proto和websocket.proto中都引用了enum.proto、errorCode.proto、及messageCommand.proto这三个协议。上述bat文件会将这些协议全都生成到pb_go文件当中。
Proto3中引用
引用其它协议,要在将协议import示例图中引用的MessageCommand和ErrorCode在别的文件中,使用前如图示引用
Proto3中的enum
enum必需要以0开始;当有意义的值为0开始时,其中传输过程中会被省略。比如ErrorCode=0如果表示成功,那在传输过程中,接收方可能收不到这个0值。所以建议enum值中的0值留空,有意义的值从1开始;
转载请注明原文地址:https://ipadbbs.8miu.com/read-62944.html