Protocol Buffers

1 篇文章 0 订阅

protocol buffers 是一种数据交互规范(感觉类似 json,xml 这种),protobuf跨平台、跨语言(即各种编程语言都有对应的处理包,只要遵从相同的规范,就可以实现编码解码)

protoc 用法及参数

  1. 使用方法: protoc [OPTION] PROTO_FILES
  2. 参数:
    • -IPATH, --proto_path=PATH: 寻找依赖包的导入路径,可以多次指定,指定 proto_path 时,需要编译的 PROTO_FILES文件必须要在某个 proto_path 中

常见问题

  1. proto文件中导入包不存在

    syntax = "proto3";
    package videoup.open.service.v1;
    option go_package = "api";
    import "google/api/annotations.proto";
    import "github.com/gogo/protobuf/gogoproto/gogo.proto";
    import "google/protobuf/empty.proto";
    service VideoUpOpen {
    }
    
    google/api/annotations.proto: File not found.
    github.com/gogo/protobuf/gogoproto/gogo.proto: File not found.
    api.proto:5:1: Import "google/api/annotations.proto" was not found or had errors.
    api.proto:6:1: Import "github.com/gogo/protobuf/gogoproto/gogo.proto" was not found or had errors.
    

    报错是因为 protoc 无法找到.proto文件中导入的包。需要明确两个点,一是导入的包必须是已经下载下来的,二是需要指定 protoc 查找导入包的路径。通过 protoc --proto_path='xxx'可以指定查找路径

  2. 遇到了一个编译 xxx.proto 文件时,因 protobuf 版本问题导致编译后的 import 路径变化较大

    原因是:

    安装protobuf时会自动使用最新版本,新旧版本的protoc对于 .google.protobuf.Empty 的引用不同
    新版本3.1.4:emptypb "google.golang.org/protobuf/types/known/emptypb"
    旧版本3.1.3:empty "github.com/golang/protobuf/ptypes/empty"
    

    根据实际情况看是否需要解决,如果不影响系统,可以忽略,一定要解决可以降级 protobuf 版本

    // 卸载 3.1.4的 protobuf
    brew uninstall protobuf 
    // 安装3.1.3 版本
    PROTOC_ZIP=protoc-3.13.0-osx-x86_64.zip
    curl -OL https://github.com/protocolbuffers/protobuf/releases/download/	v3.13.0/$PROTOC_ZIP
    sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
    sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*'
    rm -f $PROTOC_ZIP
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值