当前位置: 首页 > 知识库问答 >
问题:

Proplbuf:如何从FieldOptions解析描述符消息

暴英达
2023-03-14

我下面有一个原始文件

syntax = "proto2";
package cmd;

import "google/protobuf/descriptor.proto";

message FlagDetail {
  required string name = 1;
  required string value = 2;
  required string shorthand = 3;
  required string usage = 4;
}

extend google.protobuf.FieldOptions {
  optional FlagDetail info = 1234;
}

message VersionFlags {
  optional bool client = 2 [ (info) = { name: "client" value: "false" shorthand: "c" usage: "Client version only (no server required)."}];
  optional bool short = 3  [ (info) = { name: "short" value: "false" shorthand: "baz" usage: "Print just the version number."}];
  optional string output = 4 [ (info) = { name: "output" value: "" shorthand: "o" usage: "One of 'yaml' or 'json'."}];
}

如何获取空消息的默认值FlagDetail

像这样的事

var msg VersionFlags
md := ForMessage(&msg)  
o := md.Field[0].GetOptions()
o.GetFlagDetail.GetName()  //unfortunately, there's no method like this

BTW ForMessage()来自这里:https://github.com/golang/protobuf/blob/master/descriptor/descriptor_test.go

这是我的原始文件https://gist.githubusercontent.com/shiywang/3d9f53fe253bb4195d65b3626442cb66/raw/89c286599a4103f67b80a62c87c69847497fa289/protofile

共有1个答案

丌官晨
2023-03-14
_, md := descriptor.ForMessage(msg.(descriptor.Message))
info, err := proto.GetExtension(md.GetOptions(), cmdproto.E_Cmd)
if err != nil {
    panic(err)
}
return info.(*cmdproto.CommandInfo)

有点像这样,但我真正遇到的问题是https://github.com/golang/protobuf/issues/372

 类似资料:
  • Python 中,通过使用描述符,可以让程序员在引用一个对象属性时自定义要完成的工作。 本质上看,描述符就是一个类,只不过它定义了另一个类中属性的访问方式。换句话说,一个类可以将属性管理全权委托给描述符类。 描述符是 Python 中复杂属性访问的基础,它在内部被用于实现 property、方法、类方法、静态方法和 super 类型。 描述符类基于以下 3 个特殊方法,换句话说,这 3 个方法组成

  • 本文向大家介绍Python描述符descriptor使用原理解析,包括了Python描述符descriptor使用原理解析的使用技巧和注意事项,需要的朋友参考一下 描述符(descriptor)是实现了__get__、__set__、__del__方法的类,进一步可以细分为两类: 数据描述符:实现了__get__和__set__ 非数据描述符:没有实现__set__ 描述符在类的属性调用中起着很重

  • 当我在Weblogic 10.3.6中部署WAR时,它会运行,但在Weblogic 10.3.0中,它会抛出以下内容: 无法加载描述符D:\bea103\user_projects\domain\SRVWinplex\Deployments\WinplexA模块WinplexA的oader2.java:768weblogic.servlet.internal.错误是escriptor.get描述符

  • 本节举例说明部署描述文件中的元素。属性没有在图中显示。详细信息请参阅部署描述文件模式。 1.web-app元素 web-app 元素是一个 Web 应用程序的根部署描述符。此元素包含下列元素。这个元素有一个必需的属性 version 来指定部署描述符符合哪个版本的模式。此元素的所有子元素可以是任意的顺序。 FIGURE 14-1 web-app Element Structure 2.descri

  • 我的定义如下: 我的存储库中有两个文件: http://repo.example.com/repo/myorg/mymodule/1.0-SNAPSHOT/mymodule-1.0.0-ivy.xml http://repo.example.com/repo/myorg/mymodule/1.0-SNAPSHOT/mymodule-1.0.0.jar 当我下定决心时,艾薇似乎找不到我的描述。我试着

  • 我成功地使用Hibernate验证器来验证请求POJO。getters上的注释在某种程度上是自文档化的,因此人们可以仔细阅读生成的javadoc以了解约束是什么。 我觉得这对于有效的文档来说还不够好。我试图编写一个Javadoc自定义Taglet,该Taglet内省当前包含类并构建类中属性约束的HTML表。 例如,如果一个属性有@size注释,我就可以找到关于这个ConstraintDescrip