【问题标题】:How correctly import protobuf's files?如何正确导入 protobuf 的文件?
【发布时间】:2020-08-13 06:46:08
【问题描述】:

city.proto 文件中,我想使用(导入)protobuf 的.proto 文件。在我的 golang 应用程序中,我使用 go 模块。

city.proto

syntax = "proto3";

package proto;

import "google/protobuf/timestamp.proto";

option go_package = "./proto";

message City {
    google.protobuf.Timestamp create_at = 1;
}

当我尝试从 city.proto 文件生成代码时,它会引发这样的错误:

google/protobuf/timestamp.proto: File not found.
city.proto:3:1: Import "google/protobuf/timestamp.proto" was not found or had errors.
city.proto:25:5: "google.protobuf.Timestamp" is not defined.

我在我的 gRPC 项目目录中创建了一个 proto 文件夹。 city.proto 文件位于此文件夹中。我运行这样的命令:

protoc -I proto/ proto/city.proto --go_out=plugins=grpc:proto/city.

此命令仅在我不在 proto 文件中使用 import 的情况下有效。

go 版本

go version go1.12.9 windows/amd64

protoc --version

libprotoc 3.11.4

回显 %GOPATH%

C:\Users\NNogerbek\go

在该目录中,我看到三个具有这种结构的文件夹:

bin
    protoc.exe
    protoc-gen-go.exe
pkg
    mod
        **packages**
src
    google.com
        protobuf
            timestamp.proto

我运行这样的命令:

go list -f "{{ .Path }} {{ .Dir }}" -m github.com/golang/protobuf

命令结果:

github.com/golang/protobuf C:\Users\NNogerbek\go\pkg\mod\github.com\golang\protobuf@v1.4.0

【问题讨论】:

  • 你运行了什么命令来生成你的代码?
  • 我在我的 gRPC 项目目录中创建了一个proto 文件夹。 city.proto 文件位于此文件夹中。我运行这样的命令:protoc -I proto/ proto/city.proto --go_out=plugins=grpc:proto/city。此命令适用于我不在 proto 文件中使用 import 的情况。
  • 经过多次尝试,我找到了一种使用以下命令生成代码而不会出错的方法:protoc proto/city.proto -I. -I%GOPATH%/src --go_out=:.。你觉得在命令中指定src文件夹的路径好不好?
  • 我也想在我自己的proto文件中使用第三方实现gogo/protobuf的proto文件。例如import "github.com/gogo/protobuf/gogoproto/gogo.proto";。文件可见性的问题似乎尚未解决。

标签: go protocol-buffers grpc proto


【解决方案1】:

经过多次尝试,我找到了一种方法,可以使用以下命令将 go 代码生成到我的 gRPC 服务器而不会出错:

protoc -I. -I%GOPATH%/src --gogofaster_out=plugins=grpc:. proto/city.proto

正如您在命令中看到的,我指定了 protobuf 文件所在的 src 文件夹的路径。

我还使用了gogoprotobuf 包的gogofaster 插件。

【讨论】:

    猜你喜欢
    • 2018-10-29
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    相关资源
    最近更新 更多