Go 言語で SQLite を使う(Windows 向けの紹介)

今回はパッケージの紹介のみ。 つか, Windows で cgo を使うための覚え書きのようなものか。

SQLite はアプリケーションに組み込み可能な簡易 RDBMS で,公有(public domain)のソフトウェアとして公開されている。 C 言語で書かれているため多くのプラットフォームまたは(C 言語とバインド可能な)多くのプログラミング言語で利用可能である。 コア部分のコードが(他の製品に比べて)小さいため組込みソフトウェアで使われることもある。

mattn/go-sqlite3

Go 言語で利用可能な SQLite パッケージはいくつか存在するが,標準の database/sql に対応しているのは mattn/go-sqlite3 のみのようだ。

このパッケージを利用するには GCC が必要である(内部で C 言語コードのコンパイルを行うため)。 GCC がない状態で go get しようとすると以下のようにエラーになる。

$ go get -v github.com/mattn/go-sqlite3
github.com/mattn/go-sqlite3
# github.com/mattn/go-sqlite3
exec: "gcc": executable file not found in %PATH%

なお,必要なコードは mattn/go-sqlite3 に組み込まれているため SQLite サイトからソースコードや DLL などのバイナリを別途取ってくる必要はない1

GCC の導入

Linux などのプラットフォームには最初から GCC が入っているが, Windows 環境には残念ながら入ってないので別途用意する必要がある2。 Windows 環境で GCC のみ が必要なのであれば MinGW-w64 から Windows 用のバイナリを取得するのがお勧めである3

サンプルをコンパイルしてみる

mattn/go-sqlite3_example/simple/simple.go というサンプルファイルがあるので,これを動かして動作確認してみる。

$ go run simple.go

これで foo.db ファイルができていたら成功だ。 適当なブラウザツールで中身を確認してみるといいだろう。

あぁ SQLite 用の SQL 方言を覚えないと。 なんで製品ごとに SQL の方言がこんなに微妙な感じなんだろうねぇ。 特定の製品にロックインさせるための陰謀なのだろうか(笑)

ブックマーク


  1. mattn/go-sqlite3 に組み込まれている SQLite のバージョンは 2018-03-31 時点で 3.22.0 のようだ。 ↩︎

  2. Windows 10 用の Linux 系サブシステムになら入ってると思うが,私は Windows 10 を使ったことがないのでよく知らない。 ↩︎

  3. GCC だけでなく autotools などの周辺ツールも必要なら MSYS2 を導入するほうがいいかもしれない(参考: MSYS2 による gcc 開発環境の構築 ― gcc パッケージ群の導入)。今回は MinGW-w64 で全く問題ない。 ↩︎