普段は GAE でgolang を使っているけど、golang でmysql 使ったことないってのもどうなのかな? と思ったので、 ちょっとしたサンプルアプリを通してmysql を使ってみようと思った。 で、ORM どーしーよーかなと思って、 色々調べた記録です。 標準パッケージORMに求める要件 structにマッピングできる テーブル名とかstructに変な命名規則を適用させる必要がない 生SQLが書ける 発行されるクエリがイメージできる パフォーマンスが極端に悪くないgormgorpdbr xorm この記事を書いた後に知ったORMsqlboiler おすすめは? 結局何を使ったのか? 標準パッケージ標準パッケージが良い感じであれば、ORM は不要だと思ったので確認してみた。 標準パッケージではdatabase/sql を利用する。 https://golang.
プログラムを書いていると、素直に実装した結果として毎回特定の条件が満たされているけど、本来それは誰も保証してないという場面に出くわすことがよくある。保証されていない偶然の動作に依存することで生じるバグというのはかなり多い。 例えば最近では、ドラゴンボールZ ドッカンバトルというゲームで、2回SQL文を実行した結果が同じ順序で並んでいるという誤った期待をしているコードがあったせいで、ガチャの確率表示がめちゃくちゃになってしまって、運営が確率操作しているのではないかという騒動が発生したことがあった [1]。データベースでは空のテーブルにデータを追加してその直後に読み返すと、データを追加した順番に結果が返ってきたりしがちなので、問題のコードはきれいなテスト環境では偶然うまく動いてしまったのだろうと思う。 上のようなバグを防ぐために最近よく使われているのは、本来保証しないところをわざと壊すという方

この記事はGo2 Advent Calendar 2017 13日目の記事です。 昨日は@kami_zh さんのGoで標準出力をキャプチャするパッケージを書いた でした。go-sqlrowGo言語で標準パッケージを使用して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は可変長個のポインタを引

5.3SQLiteデータベースの使用SQLiteはオープンソースの組み込み式リレーショナルデータベースです。独立しており、設定なしでトランザクションのSQLデータベースエンジンをサポートします。非常にポータブルで簡単に利用でき、コンパクトで効率が高く、信頼性があります。他のデータベース管理システムとは異なり、SQLiteのインストールと実行は非常に簡単です。多くの場合は、ただSQLiteのバイナリファイルを用意するだけですぐに作成、接続、使用することができます。もしあなたが現在組み込み式データベースかソリューションをお探しであれば、SQLiteは絶対に考慮するに値します。SQLiteはいわばオープンソースのAccessのようなものです。 ドライバGoがサポートするsqliteのドライバも比較的多いのですが、大部分はdatabase/sqlインターフェースをサポートしていません。 ht
isucon予選中に、SQLを出力したくなったのだけど、ふとgithub.com/shogo82148/go-sql-proxyを使ってみようとしてとりあえず簡単に使う方法が書いてなくて少し使い方を調べるのに苦労したので、isuconで時間のロスなく使えるようにそのwrapperを書きました。 package main import (database/sql "github.com/go-sql-driver/mysql" # load driver before loadgo-sql-tracer _ "github.com/walf443/go-sql-tracer" ) func main() {db,err :=sql.Open('mysql:trace', dsn) } ポイントは、 元々使っていたドライバ名に":trace"とつけることgo-sql-driver/
1リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く