您可以
reflect.Type用来表示/描述Go类型。并且在运行时,您可以使用
reflect.New()来获取指向包装在中的该类型的零值的指针
reflect.Value。并且,如果您需要切片而不是单个值,则可以使用
reflect.SliceOf(),或者首先获取切片值的类型描述符。
如果存储
refect.Type表的值,则可以使用它:
type Record struct { TableName string PrimaryKey string XormStruct reflect.Type}var ListOfTables [...]Record { {"User", "id", reflect.TypeOf((*User)(nil)).Elem()}, {"Post", "post_id", reflect.TypeOf((*Post)(nil)).Elem()},}// User is xorm structtype User struct { Id int64 Name string}// Post is xorm structtype Post struct { Post_id int64 Name string Other string}请注意,您必须使用导出的字段!
然后处理表:
for _, rec := range ListOfTables { entries := reflect.New(reflect.SliceOf(t.XormStruct)).Interface() err := xorm.Find(entries) // Handle error err := xml.Marshal(entries) // Handle error}您可以
xorm使用JSON:Go
Playground看到一个可行的示例(概念证明)(没有Go
Playground上没有的)。
如果首先要存储
reflect.Type切片的值:
var ListOfTables [...]Record { {"User", "id", reflect.TypeOf([]User{})}, {"Post", "post_id", reflect.TypeOf([]Post{})},}并且使用它也更简单:
for _, rec := range ListOfTables { entries := reflect.New(t.XormStruct).Interface() err := xorm.Find(entries) // Handle error err := xml.Marshal(entries) // Handle error}请参阅此概念证明:前往Playground。
请注意,如果
Record保存切片类型(在字段中
XormStruct),则如果您需要访问结构的类型(结构的元素类型),则可以使用
Type.Elem()它。



