HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
mattn
go-sqlite3
C2012–2026
mattn / go-sqlite3

go-sqlite3

sqlite3 driver for go using database/sql

39Distinct people
43Mentions
1Explicit recommenders
9.3KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

sqlite3 driver for go using database/sql

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

I tried TDM-GCC. In my experience, certain aspects increase risks when using go: 1. go is buggier for Windows than Linux and FreeBSD, even though they are all "first class"…

montyedwards used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 7:56:55 PM UTC.

Show HN: I created a library for correctly using SQLite in Go programs direct repository linkInformational

The discussion centers on a new Go library for SQLite usage, with one user suggesting an alternative pure Go implementation and noting limited applicability, while another offers general praise. The conversation highlights specific technical considerations regarding library compatibility rather than evaluating the core tool's quality.

2 readable replies · Supporting reply 1 · Supporting reply 2 · Supporting reply 3

Mentions over time

HN mentions by year43 dated mentions

Observed mentions: 2012-09-10 14:42:16 UTC to 2026-01-23 13:49:03 UTC.

02462012-01-01 00:00:00 UTC to 2013-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20122013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 7 mentions; 0 submissions, 7 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 6 mentions; 1 submissions, 5 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20122012-01-01 00:00:00 UTC2013-01-01 00:00:00 UTC202
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC101
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC101
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC101
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC303
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC404
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC101
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC202
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC000
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC202
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC606
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC707
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC615
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC606
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC101

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
go-sqlite3 Sponsors This project is proudly sponsored by: Latest stable version is v1.14 or later, not v2. Description A sqlite3 driver that conforms to the built-in database/sql interface. Supported Golang version: See .github/workflows/go.yaml. This package follows the official Golang Release Policy. Overview go-sqlite3 Description Overview Installation API Reference Connection String DSN Examples Features Usage Feature / Extension List Compilation Android ARM Cross Compile Compiling Linux Alpine Fedora Ubuntu macOS Windows Errors User Authentication Compile Usage Create protected database Password Encoding Available Encoders Restrictions Support User Management SQL Examples *SQLiteConn Attached database Extensions Spatialite FAQ License Author Installation This package can be installed with the go get command: go get github.com/mattn/go-sqlite3 go-sqlite3 is cgo package. If you want to build your app using go-sqlite3, you need gcc. Important: because this is a CGO enabled package, you are required to set the environment variable CGO_ENABLED=1 and have a gcc compiler present within your path. API Reference API documentation can be found here. Examples can be found under the examples directory. Connection String When creating a new SQLite database or connection to an existing one, with the file name additional options can be given. This is also known as a DSN (Data Source Name) string. Options are append after the filename of the SQLite database. The database filename and options are separated by an ? (Question Mark). Options should be URL-encoded (see url.QueryEscape). This also applies when using an in-memory database instead of a file. Options can be given using the following format: KEYWORD=VALUE and multiple options can be combined with the & ampersand. This library supports DSN options of SQLite itself and provides additional options. Boolean values can be one of: 0 no false off 1 yes true on Name Key Value(s) Description UA - Create _auth - Create User Authentication, for more information see User Authentication UA - Username _auth_user string Username for User Authentication, for more information see User Authentication UA - Password _auth_pass string Password for User Authentication, for more information see User Authentication UA - Crypt _auth_crypt SHA1SSHA1SHA256SSHA256SHA384SSHA384SHA512SSHA512 Password encoder to use for User Authentication, for more information see User Authentication UA - Salt _auth_salt string Salt to use if the configure password encoder requires a salt, for User Authentication, for more information see User Authentication Auto Vacuum _auto_vacuum | _vacuum 0 | none1 | full2 | incremental For more information see PRAGMA auto_vacuum Busy Timeout _busy_timeout | _timeout int Specify value for sqlite3_busy_timeout. For more information see PRAGMA busy_timeout Case Sensitive LIKE _case_sensitive_like | _cslike boolean For more information see PRAGMA case_sensitive_like Defer Foreign Keys _defer_foreign_keys | _defer_fk boolean For more information see PRAGMA defer_foreign_keys Foreign Keys _foreign_keys | _fk boolean For more information see PRAGMA foreign_keys Ignore CHECK Constraints _ignore_check_constraints boolean For more information see PRAGMA ignore_check_constraints Immutable immutable boolean For more information see Immutable Journal Mode _journal_mode | _journal DELETETRUNCATEPERSISTMEMORYWALOFF For more information see PRAGMA journal_mode Locking Mode _locking_mode | _locking NORMALEXCLUSIVE For more information see PRAGMA locking_mode Mode mode rorwrwcmemory Access Mode of the database. For more information see SQLite Open Mutex Locking _mutex nofull Specify mutex mode. Query Only _query_only boolean For more information see PRAGMA query_only Recursive Triggers _recursive_triggers | _rt boolean For more information see PRAGMA recursive_triggers Secure Delete _secure_delete boolean | FAST For more information see PRAGMA secure_delete Shared-Cache Mode cache sharedprivate Set cache mode for more information see sqlite.org Synchronous _synchronous | _sync 0 | OFF1 | NORMAL2 | FULL3 | EXTRA For more information see PRAGMA synchronous Time Zone Location _loc auto Specify location of time format. Transaction Lock _txlock immediatedeferredexclusive Specify locking behavior for transactions. Writable Schema _writable_schema Boolean When this pragma is on, the SQLITE_MASTER tables in which database can be changed using ordinary UPDATE, INSERT, and DELETE statements. Warning: misuse of this pragma can easily result in a corrupt database file. Cache Size _cache_size int Maximum cache size; default is 2000K (2M). See PRAGMA cache_size Statement Cache Size _stmt_cache_size int Maximum number of prepared statements cached per connection; default is 0 (disabled). Note that sql.DB is a connection pool, so each connection maintains its own independent cache. DSN Examples file:test.db?cache=shared&mode=memory Features This package allows additional configuration of features available within SQLite3 to be enabled or disabled by golang build constraints also known as build tags. Click here for more information about build tags / constraints. Usage If you wish to build this library with additional extensions / features, use the following command: go build -tags "<FEATURE>" For available features, see the extension list. When using multiple build tags, all the different tags should be space delimited. Example: go build -tags "icu json1 fts5 secure_delete" Feature / Extension List Extension Build Tag Description Additional Statistics sqlite_stat4 This option adds additional logic to the ANALYZE command and to the query planner that can help SQLite to chose a better query plan under certain situations. The ANALYZE command is enhanced to collect histogram data from all columns of every index and store that data in the sqlite_stat4 table.
Read the full README on GitHub

What Hacker News says

3 sources
montyedwards·Apr 3, 2016Recommendation phrase
I tried TDM-GCC. In my experience, certain aspects increase risks when using go: 1. go is buggier for Windows than Linux and FreeBSD, even though they are all "first class" platforms in go. 2. cgo is also buggier for Windows than Linux and FreeBSD. cgo is not go, as Rob Pike said, so this is listed separately. 3. 386 was buggier than x64, at least in go 1.2 to 1.3 on Windows. I wish I could ignore 386 and XP but I cannot. So if a project includes all of the above aspects, well...it wasn't a good outcome for me, so I ended up sticking with C and C++ on Windows for non-hobby software. However, I've been very happy with go 1.4.3 + cgo + x64 on FreeBSD 10 and will probably update to go 1.6 or 1.7 within a year. Regarding go on Windows, I'm hoping to see go-sqlite3 issue #272 resolved: https://github.com/mattn/go-sqlite3/issues/272 And go i
Read the rest
ssue #14397 cmd/link, runtime: panic "invalid spdelta" with -ldflags="-linkmode internal" And go issue #10776 cmd/link: windows cgo executables missing some DWARF information And go issue #12516 runtime: throw in linked c++ library causes app crash even if caught, on windows platform And so on... I really love using go (with cgo) on non-Windows platforms, but I can't see this combo being useful on Windows for mission critical projects for a while. There's so much more to go than the language itself and switching gears to use other languages that don't offer that is painful. Maybe LXSS.sys will eventually make this irrelevant -- at least for companies that migrate from older versions to Windows 10 or to a non-Windows OS.
In Go 1.7 toolchain improvements

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.