使用 dep 时如何正确包含 protoc 的 golang protobuf/ptypes ?

使用dep时,我在包含google/protobuf/timestamp.proto众所周知的类型时遇到问题。

我收到错误:google/protobuf/timestamp.proto: File not found


服务.proto:


syntax = "proto3";

import "google/protobuf/timestamp.proto";


package com.rynop.platform;

option go_package = "rpc";


service PlatformService {

  rpc Test(EmptyMessage) returns (EmptyMessage);

}


message EmptyMessage { }


message A {  

    string summary = 1;

    google.protobuf.Timestamp start = 2;

}


message B {

  repeated A foos = 1;

}

安装包含时间戳 .proto def 的包:


dep ensure -add github.com/golang/protobuf/ptypes/timestamp 

运行protoc并出现错误:


build/bin/protoc -Ivendor -I. --twirp_typescript_out=version=v6:./clients/ts-json/ rpc/service.proto

google/protobuf/timestamp.proto: File not found.

包含时间戳的 .proto 定义的目录存在:


file vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto

vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto: ASCII text

我在本地安装协议是因为我不想将协议版本锁定/绑定到该项目:


# fetch the protoc compiler

OS_NAME=$(shell uname -s)

ifeq ($(OS_NAME),Darwin)

    PROTOC_URL=https://github.com/google/protobuf/releases/download/v3.7.1/protoc-3.7.1-osx-x86_64.zip

endif

ifeq ($(OS_NAME),Linux)

    PROTOC_URL=https://github.com/google/protobuf/releases/download/v3.7.1/protoc-3.7.1-linux-x86_64.zip

endif

build/protoc build/bin/protoc:

    mkdir -p build/protoc/bin build/bin

    cd build/protoc && curl -L -o protoc.zip $(PROTOC_URL) && \

        unzip protoc.zip && mv bin/protoc ../bin/protoc

我究竟做错了什么?


莫回无
浏览 109回答 1
1回答

慕仙森

protoc您收到的错误与您的路径有关INCLUDE。当您安装protoc编译器时(例如,安装到/usr/local/bin/protoc),为了让它拾取 google 的标准原型定义,例如timestamp.proto- 这些需要添加到您的INCLUDE路径中的某个位置(在 MacOS/Linux 上可能会使用/usr/local/include)。注意:协议头文件应该包含在协议编译器中。因此,您的原型导入文件通常位于此处:/usr/local/include/google/protobuf/timestamp.protoprotoc当编译器看到如下导入时将引用此路径:import "google/protobuf/timestamp.proto";因此,请检查您的INCLUDE路径并确保protoc标头安装正确。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go