この記事はGo2 Advent Calendar 2017 13日目の記事です。 昨日は@kami_zh さんの Goで標準出力をキャプチャするパッケージを書いた でした。
go-sqlrow
Go言語で標準パッケージを使用してRDBMSからデータを取ってくるには、以下の様に書きます1。
|
|
SQL文を発行するまではいいのですが、最後の行、sql.Row#Scan
がくせ者です。
上記の例のように、sql.row#Scan
は可変長個のポインタを引数にとり、それらにそれぞれ値をセットします。この例では値の数が2つのため大きな問題ではありませんが、値の数が増えた場合などは非常に面倒です。また、テーブルの構造が変わった場合なども非常に面倒です。
この問題を解決するため、go-sqlrow
という小さなパッケージを作りました2。
これは上記のrow.Scan
を代わりにやってくれるパッケージです。
機能・使い方は簡単で、先ほどの例を次の様に書き換えます。
|
|
後は内部でrow.Scan
相当の処理を行います。
unexportedなフィールドはencoding/json
同様、sql.Row
との対応がとれませんので、注意が必要です。
エラー処理やトランザクションなどは省略 ↩︎