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 }