Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何正确导入protobuf';s文件?_Go_Protocol Buffers_Grpc_Proto - Fatal编程技术网

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”。文件的可见性问题似乎尚未解决。