Protocol Buffers(protobuf) go语言插件下载和使用,以及import不同文件夹下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)
Protocol Buffers (protobuf) 是一种数据序列化协议,它允许开发者在多种语言之间高效地交换结构化数据。当你需要在一个项目中导入不同目录下的.proto文件时,你需要确保protobuf编译器(protoc)能够找到这些文件。 首先,确保在项目的根目录下创建了一个`.proto`文件夹,并将所有相关的`.proto`文件放在这里。然后,在每个`.proto`文件顶部添加`package`声明,以明确其所属的包名。例如: ```proto // file1.proto package com.example.myproject.file1; message MyMessage { // message definition... } // file2.proto package com.example.myproject.file2; message AnotherMessage { // message definition... } ``` 要在Python、Java或其他支持protobuf语言中引用这些文件,你需要按照以下步骤操作: 1. **设置环境变量**(针对命令行):在Unix/Linux上,可以在`.bashrc`或`.zshrc`等配置文件中添加`protoc`查找路径,比如: ```bash export PATH=$PATH:/path/to/your/protobuf/compiler ``` 或者在Windows上设置系统环境变量。 2. **编写构建脚本**(如Makefile或Gradle、Maven构建文件):指定`protoc`编译器处理哪些`.proto`文件,生成对应的`pb.go`(Go)、`MyMessage.java`(Java)等代码。例如,对于Java: ```groovy task generateProtos(type: Copy) { from 'src/main/proto' into 'generated-sources/java/com/example/myproject' include '**/*.proto' doFirst { executeProcess(['protoc', '--java_out=generated-sources/java', 'src/main/proto/*.proto']) } } ``` 或者使用protobuf Gradle插件: ```gradle apply plugin: 'io.grpc.protoc' protoc { plugins { java() } sourceDirectories = ['src/main/proto'] outputs = ['generated-sources/java'] } ``` 3. **引用生成的代码**:在你的代码中,通过引入生成的Java包来访问消息类,例如`com.example.myproject.file1.MyMessage`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值