我有原型: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 關注
- 82 瀏覽
添加回答
舉報
0/150
提交
取消