Go

database/sql — Open + Query

admin by @admin ADMIN
1h ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
`database/sql` is driver-agnostic — pick a driver (`pgx/stdlib`, `go-sql-driver/mysql`, `mattn/sqlite3`). Always `defer db.Close()` only on app exit; the pool is meant to be long-lived.
Go
Raw
package main

import (
    "database/sql"
    "fmt"
    "log"
    "time"

    _ "github.com/mattn/go-sqlite3"        // driver registration
)

func main() {
    db, err := sql.Open("sqlite3", "app.db")
    if err != nil { log.Fatal(err) }
    defer db.Close()

    // Tune the pool
    db.SetMaxOpenConns(10)
    db.SetMaxIdleConns(5)
    db.SetConnMaxLifetime(30 * time.Minute)

    // ALWAYS use parameter placeholders ($1, ? — driver dependent)
    rows, err := db.Query("SELECT id, name FROM users WHERE active = ?", true)
    if err != nil { log.Fatal(err) }
    defer rows.Close()

    for rows.Next() {
        var id int
        var name string
        if err := rows.Scan(&id, &name); err != nil { log.Fatal(err) }
        fmt.Printf("%d %s\n", id, name)
    }
    if err := rows.Err(); err != nil { log.Fatal(err) }   // late iteration errors
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.