如何检索 FieldOption 值
How to retrieve FieldOption value
我有原型:
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 *Request
,如何检索每个字段的 foo_option
的值?
来自 protoreflect.FieldDescriptor
,使用 Options()
方法。
您将需要一些类型断言来检索实际的选项值。完整的片段可能是这样的:
// 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
})
我有原型:
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 *Request
,如何检索每个字段的 foo_option
的值?
来自 protoreflect.FieldDescriptor
,使用 Options()
方法。
您将需要一些类型断言来检索实际的选项值。完整的片段可能是这样的:
// 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
})