GitHub - zombiezen/go-sqlite: Low-level Go interface to SQLite 3 (original) (raw)
zombiezen.com/go/sqlite
This package provides a low-level Go interface to SQLite 3. It is a fork of crawshaw.io/sqlite that uses modernc.org/sqlite, a CGo-free SQLite package. It aims to be a mostly drop-in replacement for crawshaw.io/sqlite.
This package deliberately does not provide a database/sql driver. See David Crawshaw's rationale for an in-depth explanation. If you want to use database/sql with SQLite without CGo, use modernc.org/sqlite directly.
Features
- Full SQLite functionality via
modernc.org/sqlite, an automatically generated translation of the original C source code of SQLite into Go - Builds with
CGO_ENABLED=0, allowing cross-compiling and data race detection - Allows access to SQLite-specific features like blob I/O and user-defined functions
- Includes a simple schema migration package
- Utilities for running embedded SQL scripts using theGo 1.16 embedding feature
- A go fix-like tool for migrating existing code using
crawshaw.io/sqlite - A simple REPL for debugging
Install
go get zombiezen.com/go/sqlite
While this library does not use CGo, make sure that you are building for one of the supported architectures.
Getting Started
import ( "fmt"
"zombiezen.com/go/sqlite" "zombiezen.com/go/sqlite/sqlitex" )
// ...
// Open an in-memory database. conn, err := sqlite.OpenConn(":memory:", sqlite.OpenReadWrite) if err != nil { return err } defer conn.Close()
// Execute a query. err = sqlitex.ExecuteTransient(conn, "SELECT 'hello, world';", &sqlitex.ExecOptions{ ResultFunc: func(stmt *sqlite.Stmt) error { fmt.Println(stmt.ColumnText(0)) return nil }, }) if err != nil { return err }
If you're creating a new application, see the package examples or the reference docs.
If you're looking to switch existing code that uses crawshaw.io/sqlite, take a look at the migration docs.