2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Go 1.16でSQLite3

Posted at

Goの環境構築ができたので、軽量DBとしてSQLite3を使ってみようと思った。
GoもMacも初心者である。

環境

  • MacBook Air (M1, 2020)
  • macOS Big Sur 11.3.1
  • SQLite3 3.32.3
  • Go 1.16.5
  • SQLite3 Driver github.com/mattn/go-sqlite3 v1.14.7

予備知識

GOでSQLite3を扱うためには、Driverと呼ばれるライブラリが必要らしい。
こちらのサイトを見ると、database/sqlインターフェースをサポートしているmattn/go-sqlite3というものが良さそうなので、これを使用する方針とした。

ググったらmattn/go-sqlite3を使う方法はたくさん出てきたが、そこに書かれた手順通りにやっても、"go install: package github.com/mattn/go-sqlite3 is not a main package"というようなエラーになってうまくいかなかった。
これはmattn/go-sqlite3の問題ではなく、Go 1.16ではデフォルトとなったらしい「モジュール対応モード(module-aware mode)」に適した方法でモジュールをインストールしないといけなかったためだった。

Go初心者に対するハメ技的な事象だったので、手順をメモに残す。

SQLite3のインストール

MacにはSQLite3が標準でインストールされているらしい。

% sqlite3 -vesrion
3.32.3 2020-06-18 14:16:19 02c344aceaea0d177dd42e62c8541e3cab4a26c757ba33b3a31a43ccc7d4aapl

brew install sqlite3 を実行した気もするが、気のせいか。

go-sqlite3はCGOパッケージというものらしい。go-sqlite3を使ったGoアプリをビルドするときには、GCCが必要だとのこと。
Macの場合は、Xcodeをインストールした後、下記コマンドでgccがインストールされるらしい。

xcode-select --install

本題

本家のドキュメントでも、"go getすればパッケージがインストールされる"と書いてある気がするが、Go 1.16(というかmodule-aware modeの場合)だと、もう少し手順が必要。

まず、適当なフォルダを作成(sqlite3-testとする)し、そのフォルダ内にメインのソースコード(main.goとする)を作成する。

sqlite3-test/main.go
package main

import (
	"database/sql"

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

func main() {
	hogehoge
}

sqlite3-testフォルダで、go mod initを実行する。
すると、go.modファイルが生成される。

% go mod init sqlite-test
% cat go.mod 
module sqlite-test

go 1.16

この状態でgo getを行うと、matt/go-sqlite3パッケージがインストールされる。

% go get github.com/mattn/go-sqlite3
go: downloading github.com/mattn/go-sqlite3 v1.14.7
go get: added github.com/mattn/go-sqlite3 v1.14.7

% cat go.mod 
module sqlite-test

go 1.16

require github.com/mattn/go-sqlite3 v1.14.7 // indirect

あとは、go runで実行すれば良い。

% go run main.go

感想

最初はエラーの意味が分からず、パッケージ側の問題かと思っていたが、Goのモジュール管理の方法が変わったことによる手順の違いだった。
(もしかしたら、Go熟練者にとってはgo.modが必要なことは常識過ぎて、記事に書いてなかっただけかもしれない。)
新しい環境になれるのには、なにかと時間がかかる。

参考になったページ

GOPATH モードからモジュール対応モードへ移行せよ
Go のモジュール管理【バージョン 1.16 改訂版】

2
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?