123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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
- }
- }
- }
- }
|