Go 如何正确导入protobuf';s文件?
在Go 如何正确导入protobuf';s文件?,go,protocol-buffers,grpc,proto,Go,Protocol Buffers,Grpc,Proto,在city.proto文件中,我想使用(导入)protobuf的.proto文件。在我的golang应用程序中,我使用go模块 城市。原型: syntax = "proto3"; package proto; import "google/protobuf/timestamp.proto"; option go_package = "./proto"; message City { google.protobuf.Timestamp create_at = 1; } go ve
city.proto
文件中,我想使用(导入)protobuf的.proto
文件。在我的golang应用程序中,我使用go模块
城市。原型:
syntax = "proto3";
package proto;
import "google/protobuf/timestamp.proto";
option go_package = "./proto";
message City {
google.protobuf.Timestamp create_at = 1;
}
go version go1.12.9 windows/amd64
libprotoc 3.11.4
C:\Users\NNogerbek\go
当我试图从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.
go list -f "{{ .Path }} {{ .Dir }}" -m github.com/golang/protobuf
此命令仅适用于在proto文件中不使用import的情况
go版本:
syntax = "proto3";
package proto;
import "google/protobuf/timestamp.proto";
option go_package = "./proto";
message City {
google.protobuf.Timestamp create_at = 1;
}
go version go1.12.9 windows/amd64
libprotoc 3.11.4
C:\Users\NNogerbek\go
协议——版本:
syntax = "proto3";
package proto;
import "google/protobuf/timestamp.proto";
option go_package = "./proto";
message City {
google.protobuf.Timestamp create_at = 1;
}
go version go1.12.9 windows/amd64
libprotoc 3.11.4
C:\Users\NNogerbek\go
回显%GOPATH%:
syntax = "proto3";
package proto;
import "google/protobuf/timestamp.proto";
option go_package = "./proto";
message City {
google.protobuf.Timestamp create_at = 1;
}
go version go1.12.9 windows/amd64
libprotoc 3.11.4
C:\Users\NNogerbek\go
在该目录中,我看到三个具有这种结构的文件夹:
bin
protoc.exe
protoc-gen-go.exe
pkg
mod
**packages**
src
google.com
protobuf
timestamp.proto
我运行这样的命令:
protoc -I proto/ proto/city.proto --go_out=plugins=grpc:proto/city.
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
在多次尝试之后,我找到了一种方法,可以使用以下命令在没有错误的情况下将go代码生成到我的gRPC服务器:
protoc -I. -I%GOPATH%/src --gogofaster_out=plugins=grpc:. proto/city.proto
正如您在命令中看到的,我指定了protobuf文件所在的src
文件夹的路径
我还使用了软件包的
gogofaster
插件。您运行了什么命令来生成代码?我在gRPC项目的目录中创建了一个proto
文件夹。city.proto
文件位于该文件夹中。我运行这样的命令:protoc-iproto/proto/city.proto--go_out=plugins=grpc:proto/city
。这个命令在我不在proto文件中使用import的情况下有效。经过多次尝试,我找到了一种使用以下命令生成代码而不出错的方法:protoc proto/city.proto-I.-I%GOPATH%/src--go\u out=:。
。您认为在命令中指定src
文件夹的路径可以吗?我还想在我自己的proto文件中使用第三方实现的proto文件。例如导入“github.com/gogo/protobuf/gogoproto/gogo.proto”代码>。文件的可见性问题似乎尚未解决。