首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >protobuf:如何解析来自FieldOptions的描述符消息

protobuf:如何解析来自FieldOptions的描述符消息
EN

Stack Overflow用户
提问于 2017-10-25 14:48:18
回答 1查看 1.5K关注 0票数 1

我下面有一份原始文件

代码语言:javascript
复制
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

像这样的东西

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

顺便说一句,ForMessage()来自这里:https://github.com/golang/protobuf/blob/master/descriptor/descriptor_test.go

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

EN

回答 1

Stack Overflow用户

发布于 2017-11-12 15:16:42

代码语言:javascript
复制
_, 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46925704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档