golang 反射mysql查询_基于go的反射实现查询生成器

基于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)

}

有疑问加站长微信联系(非本文作者)

5c5fbae790ec0313d6ee17e8b3dd9ba1.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值