Documentation ¶
Overview ¶
Package fetch 包提供了将 sql.Rows 导出为几种常用数据格式的方法
Index ¶
- Constants
- Variables
- func Column(once bool, colName string, rows *sql.Rows) ([]interface{}, error)
- func ColumnString(once bool, colName string, rows *sql.Rows) ([]string, error)
- func Map(once bool, rows *sql.Rows) ([]map[string]interface{}, error)
- func MapString(once bool, rows *sql.Rows) (data []map[string]string, err error)
- func Object(strict bool, rows *sql.Rows, obj interface{}) (int, error)
- type AfterFetcher
Constants ¶
const Tag = "orm"
Tag 表示 struct tag 的名称
Variables ¶
var ErrInvalidKind = errors.New("无效的 Kind 类型")
ErrInvalidKind 表示当前功能对数据的 Kind 值有特殊需求
Functions ¶
func Column ¶
Column 导出 rows 中某列的所有或一行数据
once 若为 true,则只导出第一条数据。 colName 指定需要导出的列名,若指定了不存在的名称,返回 error。
func ColumnString ¶
ColumnString 导出 rows 中某列的所有或是一行数据
功能等同于 Columns() 函数,但是返回值是 []string 而不是 []interface{}。
func Map ¶
Map 将 rows 中的所有或一行数据导出到 map[string]interface{} 中
若 once 值为 true,则只导出第一条数据。
NOTE: 每个数据库对数据的处理方式是不一样的,比如如下语句
SELECT COUNT(*) as cnt FROM tbl1
将使用 Map() 导出到 []map[string]interface{} 中时, 在 mysql 中,cnt 有可能被处理成一个 []byte (打印输出时,像一个数组,容易造成困惑), 而在 sqlite3 就有可能是个 int。
func Object ¶
Object 将 rows 中的数据导出到 obj 中
strict 严格模式,如果为 true,不会将 null 转换成当前类型的空值。 在多表查询的情况下,如果有空记录,则 strict 模式下,可能会出错(nil 无法转换)。
obj 只有在类型为 slice 指针时,才有可能随着 rows 的长度变化, 否则其长度是固定的,若查询结果为空值,则不会对 obj 的内容做任何更改。 可以为以下几种类型:
struct 指针: 将 rows 中的第一条记录转换成 obj 对象。
struct array 指针或是 struct slice: 将 rows 中的 len(obj) 条记录导出到 obj 对象中;若 rows 中的数量不足, 则 obj 尾部的元素保存原来的值。
struct slice 指针: 将 rows 中的所有记录依次写入 obj 中。若 rows 中的记录比 len(obj) 要长, 则会增长 obj 的长度以适应 rows 的所有记录。
struct 可以在 struct tag 中用 name 指定字段名称, 或是以减号(-)开头表示忽略该字段的导出:
type user struct { ID int `orm:"name(id)"` // 对应 rows 中的 id 字段,而不是 ID。 age int `orm:"name(Age)"` // 小写不会被导出。 Count int `orm:"-"` // 不会匹配与该字段对应的列。 }
第一个参数用于表示有多少数据被正确导入到 obj 中
Types ¶
type AfterFetcher ¶
type AfterFetcher interface {
AfterFetch() error
}
AfterFetcher 在数据从数据库拉取之后执行的操作