Documentation
¶
Overview ¶
Package fetch 包提供了将 sql.Rows 导出为几种常用数据格式的方法。
Index ¶
- 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 Obj(obj interface{}, rows *sql.Rows) (int, error)deprecated
- func Object(rows *sql.Rows, obj interface{}) (int, error)
- type AfterFetcher
Constants ¶
This section is empty.
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 MapString ¶
MapString 将 rows 中的数据导出到一个 map[string]string 中。 功能上与 Map() 上一样,但 map 的键值固定为 string。
func Object ¶
Object 将 rows 中的数据导出到 obj 中。
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 在数据从数据库拉取之后执行的操作。