go-sqlrow


1 min read
go-sqlrow

この記事はGo2 Advent Calendar 2017 13日目の記事です。
昨日は@kami_zhさんの Goで標準出力をキャプチャするパッケージを書いた でした。

go-sqlrow

Go言語で標準パッケージを使用してRDBMSからデータを取ってくるには、以下の様に書きます[1]

type Person struct {
    ID   string
    Name string
}

db, _ := sql.Open("dn", "dsn")
row, _ := db.Query(`SELECT id, name FROM person where id='foo'`)
var p Person
row.Scan(&p.ID, &p.Name)

SQL文を発行するまではいいのですが、最後の行、sql.Row#Scanがくせ者です。
上記の例のように、sql.row#Scanは可変長個のポインタを引数にとり、それらにそれぞれ値をセットします。この例では値の数が2つのため大きな問題ではありませんが、値の数が増えた場合などは非常に面倒です。また、テーブルの構造が変わった場合なども非常に面倒です。

この問題を解決するため、go-sqlrowという小さなパッケージを作りました[2]
これは上記のrow.Scanを代わりにやってくれるパッケージです。

機能・使い方は簡単で、先ほどの例を次の様に書き換えます。

type Person struct {
    ID   string
    Name string
}

db, _ := sql.Open("dn", "dsn")
row, _ := db.Query(`SELECT id, name FROM person where id='foo'`)
var p Person
sqlrow.Bind(row, &p)

後は内部でrow.Scan相当の処理を行います。
unexportedなフィールドはencoding/json同様、sql.Rowとの対応がとれませんので、注意が必要です。


  1. エラー処理やトランザクションなどは省略 ↩︎

  2. godoc: https://godoc.org/github.com/nasa9084/go-sqlrow ↩︎


Parcel + Riot.js
Previous article

Parcel + Riot.js

この記事は Riot.js Advent Calendar 2017 13日目の記事です。 昨日は@suppleさんによるRiot+ElectronでMarkdownエディタを作るでした。 tl;dr ParcelというJavaScriptのモジュールバンドラを触ってみた webpackなどと比べて設定ファイルなどもいらずとても簡単 ホットリロードな開発サーバを簡単に実行できる Riotと組み合わせるのもそれほど難しくない Parcel + Riot.js ParcelというJavaScriptのモジュールバンドラが話題なのでさわってみました。 国内で話題になっている元の記事は「webpack時代の終わりとparcel時代のはじまり」。 Reactとの組み合わせで記事を書かれています。 個人的にはRiot.jsが好みなので、

Kubernetes-powered Docker for mac is released!
Next article

Kubernetes-powered Docker for mac is released!

DockerCon EU 2017で、DockerがKubernetesを統合・サポートすると発表されましたが、本日ついにKubernetesサポート版Docker for macが(Edgeリリースですが)リリースされました! これにより、macを使用している場合は(おそらく過去最も簡単に)開発用Kubernetesクラスタを起動することができるようになりました! この記事では、Docker for macでKubernetesを立ちあげる手順をまとめておきます。 Kubernetesの起動手順 Docker for macのStable版を利用している場合、Edge版をインストールする必要があります。 Install Docker


GO TOP

🎉 You've successfully subscribed to something tech.!
OK