データベースを伴うテストを書いていて、何故かテスト結果が安定しない事象に出くわして「なんでだ?????」と混乱した結果、データベースの状況をprintデバッグをしたくなって作りました*1。
使い方は
package main import ( "database/sql" "log" "github.com/k1LoW/qp" _ "github.com/mattn/go-sqlite3" ) func main() { db, err := sql.Open("sqlite3", "path/to/db") if err != nil { log.Fatal(err) } defer db.Close() qp.Print(db, "SELECT * FROM users WHERE username = 'alice'") }
みたいにqp.Print()
に *sql.DB
と実行したいクエリを渡すと、
$ go run main.go +----+----------+----------+-------------------+---------------------+---------+ | id | username | password | email | created | updated | +----+----------+----------+-------------------+---------------------+---------+ | 1 | alice | passw0rd | alice@example.com | 2017-12-05 00:00:00 | <nil> | +----+----------+----------+-------------------+---------------------+---------+ (1 row)
のように結果がでるシンプルなものです。SELECT
だけ結果をだしますが、他のクエリでもデータベースに投げるようにしています。
私のように混乱しないとなかなか必要になることはないと思いますが、「Goのコードからデータベースにクエリをカジュアルに投げてデバッグしたい」というときがあれば使ってみてください。
*1:原因は、単純にgo test ./... がパッケージ単位で並列に実行されるのに対して別のパッケージで同じテストデータベースにクエリを投げていたからでした...