![image.png](https://static.studygolang.com/190103/26a8afa7834a488471aa31490ebbe455.png)
具体代码如上,就是mysql赋值哪块,我想通过结构体里面的属性动态的赋值抽象这块的逻辑,而不是一个一个填属性对应的指针
func Transform(baseData []map[string][]byte,typeStruct interface{}) []interface{}{
counters:=[]interface{}{}
for _,value:=range baseData{
dataV:=reflect.Indirect(reflect.ValueOf(typeStruct))
//取结构体字段数
count:=dataV.NumField()
for k,v:=range value {
for i := 0; i < count; i++ {
//取结构体字段名
name := strings.ToLower(dataV.Type().Field(i).Name)
if k == name {
//取结构体类型
typ := dataV.Type().Field(i).Type.Kind()
switch typ {
case reflect.Int64:{
vInt64, _ := strconv.ParseInt(string(v), 10, 64)
dataV.Field(i).SetInt(vInt64)
break
}
case reflect.String:{
vString := string(v)
dataV.Field(i).SetString(vString)
break
}
case reflect.Bool:{
vBool, _ := strconv.ParseBool(string(v))
dataV.Field(i).SetBool(vBool)
break
}
default:
break
}
}
}
}
//fmt.Println(dataV)
dataVV:=dataV.Interface()
counters=append(counters,dataVV)
}
return counters
}
新手代码写得不好,这是之前写的一个 主要是用golang的reflect包 只能转换int bool 和string类型的,其他的也是差不多用法
#3