如何在golang中使用带有grpc的预定义protobuf类型(即"google/protobuf/timestamp.proto")

Adr*_*ian 12 go protocol-buffers grpc

我正在尝试使用google/protobuf/timestamp.protogRPC插件和Golang.这就是我的运作方式protoc:

protoc -I  ./   ./*.proto --go_out=plugins=grpc:.
Run Code Online (Sandbox Code Playgroud)

这是我的.proto:

#domain.proto
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.viant.xyz";
option java_outer_classname = "domain";

import "google/protobuf/timestamp.proto";

message Foo {
    Timestamp modifiedTime = 1;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我看到以下错误:

domain.proto: Import "google/protobuf/timestamp.proto" was not found or had errors.
domain.proto:44:5: "Timestamp" is not defined.
Run Code Online (Sandbox Code Playgroud)

我错过了什么,或者还没有支持?

小智 8

添加/usr/local/include以包含要使用的路径/usr/local/include/google/api/timestamp.proto:

protoc -I/usr/local/include -I. --go_out=plugins=grpc:. *.proto
Run Code Online (Sandbox Code Playgroud)

正如你所看到的timestamp.proto,Timestamp存在于包中google.protobuf,所以你必须修改使用Timestamp如下:

message Foo {
    google.protobuf.Timestamp modifiedTime = 1;
    ...
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ovy 5

尚不完全支持它,但是您可以通过更改使其工作

message Foo {
    google.protobuf.Timestamp modifiedTime = 1;
    ...
}
Run Code Online (Sandbox Code Playgroud)

并通过修复生成的文件导入

import google_protobuf "google/protobuf/timestamp.pb"
Run Code Online (Sandbox Code Playgroud)

import google_protobuf "github.com/golang/protobuf/ptypes/timestamp"
Run Code Online (Sandbox Code Playgroud)


Dzi*_*ars 5

就我而言,问题出在我的 Fedora 29 设置中。

# Install Protoc compiler. By default it is 3.5.0 version
sudo dnf -y install protoc
Run Code Online (Sandbox Code Playgroud)

这是我的错误设置。所以我用以下步骤修复了它。也要注意变灰的命令行。

# Uninstall old 3.5.0 version
sudo dnf remove protobuf

# Make sure you grab the latest version
curl -OL  
https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip
# Unzip
unzip protoc-3.6.1-linux-x86_64.zip -d protoc3
# Move protoc to /usr/local/bin/
sudo mv protoc3/bin/* /usr/local/bin/
# Move protoc3/include to /usr/local/include/
sudo mv protoc3/include/* /usr/local/include/
# Optional: change owner
sudo chown $USER /usr/local/bin/protoc
sudo chown -R $USER /usr/local/include/google
Run Code Online (Sandbox Code Playgroud)

在此之后,我可以使用:

import "google/protobuf/timestamp.proto";

message Session {
    google.protobuf.Timestamp create_time = 1;
}
Run Code Online (Sandbox Code Playgroud)