參考go系列教材反射章節,源代碼沒有實現輸出字段,我根據對反射的理解實現了對字段進行輸出。beego的orm就是基於反射實現的。golang
/* # @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) }