package util import ( "database/sql" "reflect" ) func RowsToObject(rows sql.Rows, obj interface{}) (interface{}, error) { columns, err := rows.Columns() if err != nil { return nil, err } v := reflect.ValueOf(obj).Elem() vtype := v.Type() colLen := len(columns) vals := make([]interface{}, colLen) for i := 0; i < colLen; i++ { b := make([]byte, 20) vals[i] = &b } for rows.Next() { rows.Scan(vals...) } var ( colName string field reflect.StructField ok bool ) for i := 0; i < colLen; i++ { colName = columns[i] field, ok = vtype.FieldByName(colName) if !ok { continue } if field.CanSet() { switch field.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: break } } } }