使用反射把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) }