golang protobuf 使用反射读取字段值


 1 func func1() {
 2     clt := &protooo.CollectInfo{} // 这是一个 proto Message
 3     clt.TableName = proto.String("table1") // 给字段赋值
 4     //msgv1 := proto.MessageV1(proto.MessageV2(clt))
 5     msg := proto.MessageReflect(clt) // 获取反射 Message
 6     msgDesc := msg.Descriptor() // Descriptor
 7     //enumDs := msgDesc.Enums()
 8     //for i:=0; i<enumDs.Len(); i++ {
 9     //    fmt.Println(enumDs.Get(i).Name())
10     //}
11 
12     fmt.Println("=======================================================")
13 
14     fieldDs := msgDesc.Fields() // 获取所有字段
15     for i:=0; i<fieldDs.Len(); i++ {
16         fieldD := fieldDs.Get(i)
17         // logid protooo.CollectInfo.logid uint64
18         // 返回 proto文件中的字段名
19         fmt.Printf("%s %s %v\n", fieldD.Name(), fieldD.FullName(), fieldD.Kind())
20         if fieldD.Name() == "table_name" {
21             val := msg.Get(fieldD) // 获取字段值
22             fmt.Println(val.String()) // table1
23         }
24     }
25 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM