英文:
How to retrieve FieldOption value
问题
我有一个proto文件:
extend google.protobuf.FieldOptions {
string foo_option = 50000;
}
message Request {
// 所有字段都有foo_option
string str1 = 1 [(foo_option) = "bar1"];
string str2 = 1 [(foo_option) = "bar2"];
}
在Go语言中,如果给定 req *Request
,我该如何获取每个字段的 foo_option
值呢?
英文:
I have proto:
extend google.protobuf.FieldOptions {
string foo_option = 50000;
}
message Request {
// all fields have foo_option
string str1 = 1 [(foo_option) = "bar1"];
string str2 = 1 [(foo_option) = "bar2"];
}
In Go, given req *Request
, how do I retrieve the values of foo_option
of each field?
答案1
得分: 3
从protoreflect.FieldDescriptor
中使用Options()
方法。
您需要进行一些类型断言来检索实际的选项值。完整的代码片段可能如下所示:
// 导入
// "google.golang.org/protobuf/proto"
// "google.golang.org/protobuf/reflect/protoreflect"
// "google.golang.org/protobuf/types/descriptorpb"
p := msg.ProtoReflect()
p.Range(func(fd protoreflect.FieldDescriptor, value protoreflect.Value) bool {
opts := fd.Options().(*descriptorpb.FieldOptions)
s, _ := proto.GetExtension(opts, mypbpkg.E_FooOption)
fmt.Println(*s.(*string)) // bar1
return true
})
英文:
From a protoreflect.FieldDescriptor
, use Options()
method.
You will need a few type assertions to retrieve the actual option value. The full snippet might be like this:
// imports
// "google.golang.org/protobuf/proto"
// "google.golang.org/protobuf/reflect/protoreflect"
// "google.golang.org/protobuf/types/descriptorpb"
p := msg.ProtoReflect()
p.Range(func(fd protoreflect.FieldDescriptor, value protoreflect.Value) bool {
opts := fd.Options().(*descriptorpb.FieldOptions)
s, _ := proto.GetExtension(opts, mypbpkg.E_FooOption)
fmt.Println(*s.(*string)) // bar1
return true
})
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论