go 使用反射 把db中的值填充到struct,简单orm
使用反射把sql.Rows 中值填充到struct 中,从网上找了很多也没有有效的优雅的方法,参考了gorm后,终于找到了,还是对指针了解不够
package main
import (
"database/sql"
"fmt"
"reflect"
_ "github.com/go-sql-driver/mysql"
)
var db *sql.DB
type Test struct {
UserId int
UserName string
}
func main() {
db, _ = sql.Open("mysql", "uname:passwd@tcp(ip:port)/dbname?charset=utf8")
rows, err := db.Query("select user_id UserId,user_name UserName from test")
defer rows.Close()
if err != nil {
fmt.Println("sql open error ", err)
}
t := Test{}
columns, _ := rows.Columns()
values := make([]interface{}, len(columns))
reflectStruct := reflect.ValueOf(&t).Elem()
for i, v := range columns {
values[i] = reflectStruct.FieldByName(v).Addr().Interface()
}
for rows.Next() {
rows.Scan(values...)
}
fmt.Println(t)
}
浙公网安备 33010602011771号