内容简介:参考go系列教材反射章节,源代码没有实现输出字段,我根据对反射的理解实现了对字段进行输出。beego的orm就是基于反射实现的。
基于 go 的反射实现查询生成器
参考go系列教材反射章节,源代码没有实现输出字段,我根据对反射的理解实现了对字段进行输出。beego的orm就是基于反射实现的。
/* # @Time : 2019-01-05 16:57 # @Author : smallForest # @SoftWare : GoLand */ package main import ( "fmt" "reflect" ) type order3 struct { ordId int customerId int } type employee3 struct { name string id int address string salary int country string } func createQuery3(q interface{}) { if reflect.ValueOf(q).Kind() == reflect.Struct { t := reflect.TypeOf(q).Name() query := fmt.Sprintf("insert into %s(", t) Names := reflect.TypeOf(q) for j := 0; j < Names.NumField(); j++ { if j==0{ query = fmt.Sprintf("%s%s",query,Names.Field(j).Name) }else{ query = fmt.Sprintf("%s,%s",query,Names.Field(j).Name) } } query = fmt.Sprintf("%s) values(",query) v := reflect.ValueOf(q) for i := 0; i < v.NumField(); i++ { switch v.Field(i).Kind() { case reflect.Int: if i == 0 { query = fmt.Sprintf("%s%d", query, v.Field(i).Int()) } else { query = fmt.Sprintf("%s,%d", query, v.Field(i).Int()) } case reflect.String: if i == 0 { query = fmt.Sprintf("%s\"%s\"", query, v.Field(i).String()) } else { query = fmt.Sprintf("%s,\"%s\"", query, v.Field(i).String()) } default: fmt.Println("Unsupported type") return } } query = fmt.Sprintf("%s)", query) fmt.Println(query) return } fmt.Println("unsupported type") } func main() { o := order3{456, 33} createQuery3(o) e3 := employee3{ "Naveen", 555, "Coimbatore", 9000, "India", } createQuery3(e3) i := 90 createQuery3(i) }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
具体数学(英文版第2版)
[美] Ronald L. Graham、Donald E. Knuth、Oren Patashnik / 机械工业出版社 / 2002-8 / 49.00元
This book introduces the mathematics that supports advanced computer Programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of ma......一起来看看 《具体数学(英文版第2版)》 这本书的介绍吧!