orm.go_test 771 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package util
  2. import (
  3. "database/sql"
  4. "reflect"
  5. )
  6. func RowsToObject(rows sql.Rows, obj interface{}) (interface{}, error) {
  7. columns, err := rows.Columns()
  8. if err != nil {
  9. return nil, err
  10. }
  11. v := reflect.ValueOf(obj).Elem()
  12. vtype := v.Type()
  13. colLen := len(columns)
  14. vals := make([]interface{}, colLen)
  15. for i := 0; i < colLen; i++ {
  16. b := make([]byte, 20)
  17. vals[i] = &b
  18. }
  19. for rows.Next() {
  20. rows.Scan(vals...)
  21. }
  22. var (
  23. colName string
  24. field reflect.StructField
  25. ok bool
  26. )
  27. for i := 0; i < colLen; i++ {
  28. colName = columns[i]
  29. field, ok = vtype.FieldByName(colName)
  30. if !ok {
  31. continue
  32. }
  33. if field.CanSet() {
  34. switch field.Kind() {
  35. case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  36. break
  37. }
  38. }
  39. }
  40. }