はじめに
今回は、xorm
というパッケージを使って、簡単にデータベース操作の確認をしてみたので、共有させて頂きます。
いきなり結論のコード
今日のコード
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
)
func main() {
engine, err := xorm.NewEngine("mysql", "root:password@/mydb")
if err != nil {
fmt.Println(err)
}
defer engine.Close()
result, err := engine.Query("select * from users limit 1")
if err != nil {
fmt.Println(err)
}
for k, v := range result[0] {
fmt.Println(k, string(v)) // => 取得できているか確認
}
}
解説
xorm.NewEngine()
でエンジン作成
engine, err := xorm.NewEngine("mysql", "root:password@/mydb")
xorm
パッケージに用意されている、NewEngine
関数でエンジンを作成します。
ここは、僕の実力ではうまく説明できない部分なのですが、DBに接続する前の準備のようなものかと捉えています。
ここで用意したengine
変数を起点に、この後の処理が行われます。
今回は、xormの関数を使っているのがこの部分だけですが、xormパッケージのインポート確認が取れています。
engine.Close()
でクローズする
defer engine.Close()
忘れる前に、大事なクローズ。
defer
をつけて、最後に実行するようにしてます。
engine.Query()
でクエリ作成
result, err := engine.Query("select * from users limit 1")
Query
関数は、クエリをそのまま投げられます。今回は、生SQLを突っ込んで、とりあえずの動作確認をしてます。
取得できたデータの型に注意
そのまま出力
fmt.Println(result)
出力結果
[map[birthday:[49 57 55 56 45 48 51 45 49 50 32 48 48 58 48 48 58 48 48] email:[115 104 105 98 97 115 97 107 105 95 97 115 97 104 105 64 101 120 97 109 112 108 101 46 99 111 109] first_name:[230 156 157 233 153 189] gender:[50] id:[49] last_name:[230 159 180 229 146 178] prefecture_id:[49]]]
そのまま出力してみると、バイト型になっている…
取得できているけど、値がわからない。
とりあえずstring型にキャストして取得データの確認
valueのみstring型にキャスト
for k, v := range result[0] {
fmt.Println(k, string(v))
}
出力結果
gender 2
birthday 1978-03-12 00:00:00
prefecture_id 1
id 1
email shibasaki_asahi@example.com
last_name 柴咲
first_name 朝陽
ちゃんと取れてました!
(もちろん、データは架空のものです。)
さいごに
また、至らない点があれば、コメントなどでご指摘頂ければ嬉しいです。
最後まで、ありがとうございました。