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 }