protobuf教程(一)---引入其他proto文件
本章主要介绍了如何在 proto 文件中引入其他 proto 文件。
1. 概述
Protocol buffers 是一种语言无关、平台无关的可扩展机制或者说是数据交换格式,用于序列化结构化数据。与 XML、JSON 相比,Protocol buffers 序列化后的码流更小、速度更快、操作更简单。
Protocol buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data.
2. 详解
基本定义
一个简单的 protobuf 文件定义如下:
|
syntax = “proto3”;—指定使用 proto3 语法
option go_package = “protobuf/import;proto”;—前一个参数用于指定生成文件的位置,后一个参数指定生成的 .go 文件的 package 。具体语法如下:
|
注意:这里指定的 out_path 并不是绝对路径,只是相对路径或者说只是路径的一部分,和 protoc 的 --go_out
拼接后才是完整的路径。
也使用
--go_opt=paths=source_relative
直接指定 protoc 中 指定的是绝对路径,这样就不会去管 protobuf 文件中指定的路径。
package import;—表示当前 protobuf 文件属于 import包,这个package不是 Go 语言中的那个package。
这个 package 主要在导入外部 proto 文件时用到。
导入其他proto文件
要导入其他 proto 文件只需要使用import键字,具体如下:
|
导入后则通过被导入文件包名.结构体名使用。
component.proto 文件中 package 指定为 import,所以这里通过 import.CPU 和 import.Memory 语法进行引用。
完整代码如下:
|
导入 compoent.proto 文件,这个也是相对路径,具体和 protoc –proto_path 组合起来才是完整路径。
一般指定为项目根目录的次一级目录,编译的时候直接在根目录编译。
protoc 编译的时候通过 --proto_path
指定在哪个目录去寻找 import 指定的文件。
比如指定
--proto_path=.
即表示在当前目录下去寻找protobuf/import/compoent.proto
这个文件。
3. 完整例子
目录结构如下
|
component.proto
|
computer.proto
|
protoc 编译
在项目根路径(grpc-go-example)
下进行编译
|
参数详解:
1)–proto_path=.
指定在当前目录( grpc-go-example)寻找 import 的文件(默认值也是当前目录)
然后 protobuf 文件中的 import 路径如下
|
所以最终会去找 grpc-go-example/protobuf/import/component.proto
。
--proto_path
和import
是可以互相调整的,只需要能找到就行。
建议protoc参数 –proto_path 指定为根目录,proto文件中的import 则从根目录次一级目录开始。
2)–go_out=.
指定将生成文件放在当前目录( grpc-go-example),同时因为 proto 文件中也指定了目录为protobuf/import
,具体如下:
|
所以最终生成目录为--go_out+go_package= grpc-go-example/protobuf/import
。
可以通过参数
--go_opt=paths=source_relative
来指定使用绝对路径,从而忽略掉 proto 文件中的 go_package 路径,直接生成在 –go_out 指定的路径。
3)./protobuf/import/*.proto
指定编译 import 目录下的所有 proto 文件,由于有文件的引入所以需要一起编译才能生效。
当然也可以一个一个编译,只要把相关文件都编译好即可。
Test
|
4. 小结
- 1)通过
import "{path}";
命令引入; - 2)导入后通过被导入文件包名.结构体名方式使用;
- 3)编译时通过
--proto_path=.
指定寻找proto文件的目录,一起编译。
protobuf教程(一)---引入其他proto文件相关推荐
- protobuf根据有关联的.proto文件进行编译
环境:Goland 使用默认的Goland的protobuf的插件. base.proto: syntax = "proto3";option go_package = " ...
- Caffe源码中caffe.proto文件分析
Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下caffe.proto文件. 在src/caffe/proto目录下有一个 ...
- protobuf引入不同包下的proto文件
解决两个问题: 1.两个proto文件存放路径不同 2.两个proto的package不同 比如现在有个RankInfoRes.proto文件,它的package是: com.road.ddt.pro ...
- Protobuf之proto文件编写规则
一. 简单介绍 protobuf文件:就是定义你要的消息(类似java中的类)和消息中的各个字段及其数据类型(类似java类中的成员变量和他的数据类型) 二. Protobuf消息定义 1.消息由至少 ...
- protobuf java 编译_Maven项目中,编译proto文件成Java类
新建Maven项目 新建一个 Maven 项目: pom定义了最小的maven2元素,即:groupId,artifactId,version. groupId:项目或者组织的唯一标志,并且配置时生成 ...
- pip 安装protobuf_Python3.6安装protobuf模块+将proto文件转换成pb2.py文件
Python对版本的对应即为苛刻,笔者第一次安装时遇到了很多坑,比如无法将proto文件转换成py文件,转换了之后文件无法使用,网上各种各样的解决办法都没有讲到重点.其实会出现各种各样的问题是由于版本 ...
- Cocos Creator TypeScript 中使用ProtoBuf(利用工具把proto文件生成对应的js文件以及ts文件)
我是一枚刚入坑cocos的小白o(╯□╰)o 开发环境:Cocos Creator 1.9 (需要安装Node.js,使用npm命令) 在网上找了很久都是讲的protobuf.js的用法,但是没有 ...
- Protobuf 学习(二)编译proto文件并测试
Google 官网上的一个典型例子 (1)定义 proto 文件 // addressbook.protopackage tutorial; // package声明符message Person { ...
- 【Protobuf速成指南】.proto文件的编写与编译
文章目录 1.0版本 一.编写.proto文件 1.文件规范: 2.注释方式: 3.指定proto3语法: 4.package申明符 5.定义message 6.编写消息字段 ①类型对照表 ②唯一编号 ...
最新文章
- docker (centOS 7) 使用笔记4 - etcd服务
- 计算机二级access选择题题库_资料最新计算机二级题库,选择题资料汇总+全真试题分享(Office)...
- kafka管理神器-kafkamanager
- applicationcontext理解使用
- 海康、大华IPC的rtsp格式
- 逆袭之旅.DAY08东软实训.多态~
- pdu报头内容_1OSI七层参考模型,各个报头内容
- 浏览器的“sleep”
- 项目管理实践_8Manage:保险行业的项目管理实践
- 制作img镜像文件的5种方法
- C#【高级篇】 IntPtr是什么?怎么用?
- 数学魔鬼表达式——第二天
- 红米pro android o刷机,红米Pro官方卡刷机教程 怎么刷机
- 如何在手机浏览器中实现条形码/QR码扫描
- Rhino6.25软件安装教程|兼容WIN10
- 【技术贴】自己制作支持QQ空间背景音乐的链接教程||QQ免费空间音乐外链自己上传制作教程...
- 00_51入门知识积累__常用工具(二)
- 第一章 JSON语法用法
- DanmuPlayer插件获取数据库弹幕——ssm弹幕应用
- 一口气搞懂「Flink Metrics」监控指标和性能优化,全靠这33张图和7千字(建议收藏)