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