如何检索 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
    })