【发布时间】: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