Skip to content

goapt/scan

Repository files navigation

Scan

GoDoc Build Status Coverage Status

Scan is a Go package for scanning database rows into structs or slices of primitive types.

This project is forked from https://github.com/blockloop/scan and adjusted to be generic, while all dependencies are removed.

Installation

go get github.com/goapt/scan

Usage

import "github.com/goapt/scan"

Examples

Multiple Rows

type Person struct {
    ID   int    `db:"id"`
    Name string
}

db, err := sql.Open("sqlite3", "database.sqlite")
rows, err := db.Query("SELECT * FROM persons")
defer rows.Close()
persons, err := scan.Rows[Person](rows)

fmt.Printf("%#v", persons)
// []Person{
//    {ID: 1, Name: "brett"},
//    {ID: 2, Name: "fred"},
//    {ID: 3, Name: "stacy"},
// }

Multiple rows of primitive type

rows, err := db.Query("SELECT name FROM persons")
defer rows.Close()
names, err := scan.Rows[string](rows)

fmt.Printf("%#v", names)
// []string{
//    "brett",
//    "fred",
//    "stacy",
// }

Single row

rows, err := db.Query("SELECT * FROM persons where name = 'brett' LIMIT 1")
person, err := scan.Row[Person](rows)
defer rows.Close()

fmt.Printf("%#v", person)
// Person{ ID: 1, Name: "brett" }

Scalar value

rows, err := db.Query("SELECT age FROM persons where name = 'brett' LIMIT 1")
defer rows.Close()
age, err := scan.Row[int8](rows)

fmt.Printf("%d", age)
// 100

Custom Column Mapping

By default, column names are mapped to and from database column names using basic title case conversion. You can override this behavior by setting ScannerMapper to custom functions.

scan.ScannerMapper = func(columnName string) string {
	return strings.ToLower(columnName)
}

Why

While many other projects support similar features (i.e. sqlx) scan allows you to use any database lib such as the stdlib to write fluent SQL statements and pass the resulting rows to scan for scanning.

About

Tiny lib to scan SQL rows directly to structs, slices, and primitive types

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 11