我有原型: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"];}在 Go 中,给定 ,我如何检索每个字段的值?req *Requestfoo_option
1 回答
函数式编程
TA贡献1807条经验 获得超9个赞
从 中,使用选项()
方法。protoreflect.FieldDescriptor
您将需要一些类型断言来检索实际的选项值。完整的代码段可能如下所示:
// 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
})
- 1 回答
- 0 关注
- 69 浏览
添加回答
举报
0/150
提交
取消