fetch

package
v4.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 22, 2022 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package fetch 包提供了将 sql.Rows 导出为几种常用数据格式的方法

Index

Constants

View Source
const Tag = "orm"

Tag 表示 struct tag 的名称

Variables

View Source
var ErrInvalidKind = errors.New("无效的 Kind 类型")

ErrInvalidKind 表示当前功能对数据的 Kind 值有特殊需求

Functions

func Column

func Column(once bool, colName string, rows *sql.Rows) ([]interface{}, error)

Column 导出 rows 中某列的所有或一行数据

once 若为 true,则只导出第一条数据。 colName 指定需要导出的列名,若指定了不存在的名称,返回 error。

func ColumnString

func ColumnString(once bool, colName string, rows *sql.Rows) ([]string, error)

ColumnString 导出 rows 中某列的所有或是一行数据

功能等同于 Columns() 函数,但是返回值是 []string 而不是 []interface{}。

func Map

func Map(once bool, rows *sql.Rows) ([]map[string]interface{}, error)

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

func MapString(once bool, rows *sql.Rows) (data []map[string]string, err error)

MapString 将 rows 中的数据导出到一个 map[string]string 中

功能上与 Map() 上一样,但 map 的键值固定为 string。

func Object

func Object(strict bool, rows *sql.Rows, obj interface{}) (int, error)

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 在数据从数据库拉取之后执行的操作

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL