packagemaintypeorderstruct { ordId int customerId int}typeemployeestruct { name string id int address string salary int country string}funccreateQuery(q interface{}) string { }funcmain() {}
packagemainimport ("fmt""reflect")funcmain() { a :=56 x := reflect.ValueOf(a).Int() fmt.Printf("type:%T value:%v\n", x, x) b :="Naveen" y := reflect.ValueOf(b).String() fmt.Printf("type:%T value:%v\n", y, y)}
输出为:
type:int64 value:56
type:string value:Naveen
完整程序
熟悉完了reflect包相关API后我们看下完整程序。
packagemainimport ("fmt""reflect")typeorderstruct { ordId int customerId int}typeemployeestruct { name string id int address string salary int country string}funccreateQuery(q interface{}) {if reflect.ValueOf(q).Kind() == reflect.Struct { t := reflect.TypeOf(q).Name() query := fmt.Sprintf("insert into %s values(", t) 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")}funcmain() { o :=order{ ordId: 456, customerId: 56, }createQuery(o) e :=employee{ name: "Naveen", id: 565, address: "Coimbatore", salary: 90000, country: "India", }createQuery(e) i :=90createQuery(i)}