のんびりエンジニア

のんびりエンジニアリング

goでdbrを使ってdbを検索

go始めてみました。

とりあえずよくやる、databaseにアクセスしてusersテーブルからUserを取得する的なものをやってみました。

dbrを使う

orm的なものはいくつかあるみたいだけど、goではあまりリッチなのは好まれない傾向がありますかね。

でもmysql-driverを生で使ってSQL書いていくのは私のようなゆるエンジニアには辛いのです。

で、調べてみたらgocraftのdbrというライブラリがいい具合っぽいので使ってみました。

package main

import (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/gocraft/dbr"
)

type User struct {
    ID    int
    Email string
}

func main() {
    var user User

    // mysqlのドライバーを使ってuser: mysql、password: rootでログインしてmydatabase_developmentを使う。loggerは使わない
    conn, _ := dbr.Open("mysql", "mysql:root@/mydatabase_development", nil)

    sess := conn.NewSession(nil)

    sess.Select("*").From("users").Where("id = ?", 1).Load(&user)

    fmt.Printf("%v", user)
}

自分のコードから抜き出したものなので、まさにこのコードが動くかチェックしてないです。でもこんな感じで動くはず。

ここでvar user Uservar users []Userにして実行すると配列で取得できるのが賢いなと思いました。

気になってるけどまだ分かっていないこと

  • loggingする方法
  • transactionの使い方
  • コネクションプーリング出来るかどうか

他のORMの選択肢

  • gorp
    • cleanupなどをしていてv2に移行中の模様
  • gorm
  • xorm
    • ちょっと新しいっぽい?

その他

goの本を読み始めたんですが、みんなのGo言語いいっすね。 初学では文法を教えてくれるわけではないので厳しいですが、なんとなくgoを知ってさえいれば現場で使える技術が分かる。

初学ならスターティングGo言語を読んだらいいのかな。さっきkindleで買ったのでこれから読みます。

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】

スターティングGo言語

スターティングGo言語

github.com