问题标签 [protobuf-go]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1222 浏览

go - 将 ptypes/struct 值转换为 BSON

要求

两项服务:

  • 服务器- 用于向 MongoDB 写博客文章
  • 客户端- 向第一个服务发送请求

博客文章title的类型为string,并且content是动态类型 - 可以是任何 JSON 值。

原型缓冲区

让我们从 protobuf 消息开始,它满足要求 - stringfortitle和任何 JSON 值content

客户

客户端向服务器发送两个请求 - 一个content具有string类型,另一个具有object. 这里没有错误。

服务器

在这里我得到:

无法将 main.blogItem 类型转换为 BSON 文档:找不到 structpb.isValue_Kind 的编码器

我期待什么?要查看 MongoDB 中内容的确切值,如下所示:

我想我需要data.Content在添加的行中进行转换TODO:...

如果有帮助的话,我可以用这个例子创建 github repo。

0 投票
1 回答
1548 浏览

protobuf-go - 如何将文件解组为描述符pb.FileDescriptorProto

我正在努力使用Golang Protobuf APIv2

我正在尝试封装 protobuf 消息,以便可以调用服务器上的函数;编译时未知的函数。某种形式的东西:

我的目标是使用 protobufs 来定义函数而不是直接使用例如 Go 结构。

Google SDK 很复杂,我一直找不到示例。

例如

IIUC 这个原始文本文件不能直接使用,需要转换为描述符文件:

我假设(显然是错误的)然后我可以将其读入并将其解组为descriptorpb.FileDescriptorProto

问题:我应该怎么做?

假设客户端将发起对Adder上述服务的调用,服务器将需要一些能够将pbany.Any参数解组为正确的类型、调用函数并反转结果的过程。

奖励问题:

  • SDK 会要求我使用protoregistry来管理这些传入类型吗?或者有没有更简单的方法?调用将包括参数和结果的函数和类型,因此应该始终可以即时编组消息。
  • 任何使用的例子protoregistry?我被看似脱节的事情弄糊涂FilesTypes
0 投票
1 回答
3084 浏览

go - 恢复到早期版本的 protoc-gen-go

我正在尝试从 protobuf 文件编译成 golang。编译后,我在生成的 pb.go 中看到了这个

但是,之前生成的 pb.go 有

使用 proto 包的第 4 版,代码会中断。如何编译使其具有版本 3 的 ProtoPackage?

0 投票
0 回答
217 浏览

go - 如何避免重复 protobuf 和生成的代码

使用 gRPC 时是否有机会避免 Go in.proto和files 上的代码重复?.go

我们需要存储两个版本的代码 - 生成的和源文件: https://github.com/cqfn/degitx/blob/master/proto/hook.proto https://github.com/cqfn/degitx/blob /master/proto/go/degitxpb/hook.pb.go

在 Java 上一切都很简单——你有抽象类并且不要将它们存储在 repo 中。您只需执行它。在 Go 上,这看起来是一个导致代码重复的问题。有人解决了吗?

0 投票
2 回答
225 浏览

go - 用于动态枚举访问的 Protobuffer API

我想知道如何动态设置枚举值。

我有以下.proto文件:

设置枚举的一种方法如下:

我想动态生成我的花园,并且只有值“Rose”。有值映射,但以下不起作用:

我假设我可以使用 protoreflect 包来设置值。不幸的是,我还不清楚它是如何工作的。

此外,我想动态设置“.Flower”。我想出了如何动态设置结构中的字段,但缺乏如何将 aprotoreflect.Value转换为reflect.Value类型的知识。

0 投票
2 回答
1896 浏览

go - 无法使用 protobuf 解组字节

我正在编写一个简单的客户端服务器来了解 protobuf。
我有以下 message.proto 文件:

这是客户端的代码(省略错误):

在服务器端:

字节通过套接字就好了,但是当我在服务器端调用 Unmarshal 时,我收到以下错误:

恐慌:Text.state 中的 protobuf 标签没有足够的字段:

奇怪的是,如果我在客户端调用 Unmarshal,它就可以正常工作。
我的 protoc 版本是 3.11.2,我安装了它

我创建了 message.pb.go 文件

那么,问题似乎是由于通过套接字发送字节而出现的,但它是具有完全相同值的切片。

0 投票
3 回答
663 浏览

go - Golang grpc.server:理解服务器和服务的概念

我试图在 gRPC、Protobuf 的上下文中理解监听器、服务器和服务的概念。

让我们使用https://grpc.io/docs/languages/go/basics/上的示例作为参考。在这里我们有

  1. 听者:李
  2. gRPC 服务器:grpcServer := grpc.NewServer()
  3. 服务:RouteGuide服务

看来我们还可以将多个服务注册到同一服务器。

也就是说,除了RouteGuide Service,我们可以说SomeOther Service,SomeOtherOther Service。

我们可以注册所有这三个并期望服务器能够提供属于这三个服务的方法(RouteGuide、SomeOther、SomeOtherOther)。

假设 RouteGuide、SomeOther、SomeOtherOther 都有自己的特定于它们的 proto 文件。并且所有的原型都在同一个命名空间(package值)中。

可以说,Server 一词在这里显得过重了。不仅是grpcServer,RouteGuide、SomeOther、SomeOtherOther也被称为Servers。

我试图弄清楚如何建模或理解这些概念。

是否可以说,服务器gRPCServer通过监听lis器监听 80 端口,可以为它注册的三个服务 RouteGuide、SomeOther、SomeOtherOther 提供服务(gRPCServer)?拥有一台服务器服务多个服务是否容易出错?使用具有多个服务的一台服务器时要记住哪些注意事项?

0 投票
1 回答
156 浏览

go - 如何测试元素是否为 Any 类型

如何在 Go 中测试结构的元素是否为 Any (protobuf): *any.Any 类型?我想遍历结构的每个元素,并根据元素的类型做一个 switch case。这是消息的字段描述符:

这是我的代码:

我想要一个比前更正确的方法:

0 投票
3 回答
5067 浏览

go - 从不同的包导入 proto 文件会导致“缺少方法 protoreflect”

我是 Go 和 Protobufs 的新手,因此这可能是一个非常菜鸟的问题。对此感到抱歉。

我的 go 项目中有几个包,我想创建一个单独的包,其中包含我所有的 .proto(也是 .pb.go)文件,然后我可以将这些 proto 文件导入任何其他包中,以更好地管理我的所有 proto 文件。

但是当我将我的 proto 文件移动到一个名为“prototemps”的单独包中并将“prototemps”导入另一个名为“reader”的包中时。在 reader.go 中,我这样做:

它产生这个错误

这是我的项目结构的样子:

这是我的 .proto 的样子

这是我使用 * protoc --go_out= 生成的 .pb.go。.proto

任何帮助将不胜感激,谢谢!

0 投票
2 回答
775 浏览

grpc-go - grpc-gateway 运行时版本冲突

从最近几天开始,protoc 生成器正在使用 github.com/grpc-ecosystem/grpc-gateway 的 v2 版本生成代码。我想继续使用 github.com/grpc-ecosystem/grpc-gateway v1.16.0。我无法删除导致冲突的 v2 版本。我尝试从 go.mod 中删除,从 $GOPATH 中清除。我想我的协议生成器无法使用 v1 版本。请指导我如何同步 grpc-gateway 运行时包。

使用以下命令生成消息和服务

注意:它正在生成 grpc.pb.go 文件和 pb.go 文件,这进一步导致了问题。