Protocol Buffers(protobuf) go语言插件下载和使用,以及import不同文件夹下proto

本文介绍了如何下载并使用ProtocolBuffers(protobuf)以及其Go语言插件。通过示例详细讲解了如何编译生成protoc-gen-go,以及如何使用protobuf编译.proto文件生成.pb.go代码。同时,展示了如何处理导入其他目录下的proto文件,并提供了相关脚本和文件结构的说明。

Protocol Buffers (protobuf)是Google的跨语言、跨平台、可扩展的结构化数据序列化机制。可以在谷歌开发者网站上找到protobuf的文档。

下载protobuf及go插件

protobuf 下载地址:

https://github.com/protocolbuffers/protobuf/releases

protobuf go语言插件,新分支下载地址:

https://github.com/protocolbuffers/protobuf-go/releases

protobuf go语言插件,旧分支仓库地址:

https://github.com/golang/protobuf

注意:github.com/golang/protobuf 1.4及之后的版本其实都是新分支了,如果需要用旧分支的版本,还是选择1.4之前的版本吧。This module (github.com/golang/protobuf) contains Go bindings for protocol buffers.It has been superseded by the google.golang.org/protobuf module, which contains an updated and simplified API, support for protobuf reflection, and many other improvements. We recommend that new code use the google.golang.org/protobuf module.

编译生成protoc-gen-go

如果是新分支,不需要编译,直接下载需要的版本就好了。

旧分支编译,这里使用1.3.5的版本。下载地址:https://github.com/golang/protobuf/tags

编译前,需要安装配置GO环境,这里就不在赘述

解压protobuf-1.3.5.zip,在protoc-gen-go文件夹下,运行 go build , 生成protoc-gen-go.exe

生成.pg.go文件

版本 protocolbuffers 3.15.8 protoc-gen-go 1.3.5

同一文件夹下,放入protoc.exe,protoc-gen-go.exe,demo.proto。

demo.proto 内容如下:

// 指定语法类型为proto2  proto3更好
syntax = "proto2"; 

// 逻辑包名 无层级
package demo; 

message Demo {   
	// required 必填
	required string name = 1;
	//optional 可选
	optional int32 age = 2;
	//repeated 数组
	repeated string email = 3;
}

执行 protoc --go_out=./ ./demo.proto

即可在当前目录下生成 demo.pb.go 文件

import 导入其他目录下proto

文件目录如下

/AAA
/AAA/person.proto
/BBB
/BBB/info.proto
/common.proto
/go-protoc.bat
/protoc.exe
/protoc-gen-go.exe

person.proto 需要导入 上层文件夹的common.proto 和 另一文件夹的info.proto

go-protoc.bat 脚本如下

rem -I 引入需要的proto --go_out 指定生成的路径 后面拼接go_package指定的路径 
rem ./AAA/person.proto 选择要生成的proto文件
protoc  -I ./  -I ./BBB  --go_out=../   ./AAA/person.proto

文件内容如下:

person.proto:

// 指定语法类型为proto2  proto3更好
syntax = "proto2"; 

// 逻辑包名 无层级
package person; 

//导入proto文件
import "common.proto";
import "info.proto";

//go的包路径 ;后 可以指定包名 通常应该为一样
option go_package = "ProtobufDemo/aaa;person";

message Person {   
	optional common.Common com = 1;
	optional info.Info info = 2;
	optional string desc = 3;
}

common.proto:

// 指定语法类型为proto2  proto3更好
syntax = "proto2"; 

// 逻辑包名 无层级
package common; 

//go的包路径 ;后 可以指定包名 通常应该为一样
option go_package = "protobufdemo;protobufdemo";

message Common {   
	// required 必填
	required string name = 1;
	//optional 可选
	optional int32 age = 2;
	//repeated 数组
	repeated string email = 3;
}

info.proto :

// 指定语法类型为proto2  proto3更好
syntax = "proto2"; 

// 逻辑包名 无层级
package info; 

//go的包路径 ;后 可以指定包名 通常应该为一样
option go_package = "protobufdemo/bbb;bbb";

message Info {   
	optional string Info = 1;
}
来源:https://github.com/google/protobuf/releases protocolbuffer(以下简称PB)google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现,如:java、c#、c++、javascript、go 、python、rubyphp等,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。 本资源包含: protobuf-all-3.6.0.tar.gz 8.25 MB protobuf-all-3.6.0.zip 4.25 MB protobuf-cpp-3.6.0.tar.gz 5.18 MB protobuf-cpp-3.6.0.zip 4.57 MB protobuf-csharp-3.6.0.tar.gz 5.66 MB protobuf-csharp-3.6.0.zip 4.7 MB protobuf-java-3.6.0.tar.gz 5.86 MB protobuf-java-3.6.0.zip 4.4 MB protobuf-js-3.6.0.tar.gz 5.43 MB protobuf-js-3.6.0.zip 4.59 MB protobuf-objectivec-3.6.0.tar.gz 5.69 MB protobuf-objectivec-3.6.0.zip 4.6 MB protobuf-php-3.6.0.tar.gz 5.64 MB protobuf-php-3.6.0.zip 4.53 MB protobuf-python-3.6.0.tar.gz 5.57 MB protobuf-python-3.6.0.zip 4.52 MB protobuf-ruby-3.6.0.tar.gz 5.5 MB protobuf-ruby-3.6.0.zip 1.46 MB protoc-3.6.0-linux-aarch_64.zip 1.31 MB protoc-3.6.0-linux-x86_32.zip 1.36 MB protoc-3.6.0-linux-x86_64.zip 2.44 MB protoc-3.6.0-osx-x86_32.zip 2.39 MB protoc-3.6.0-osx-x86_64.zip 984 KB protoc-3.6.0-win32.zip Source code (zip) Source code (tar.gz)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值