クエリを投げた結果のデータをいい感じのstructにbindしたいなと思ってやり方を探してました。
いい感じのないかなと思って探したら下記のライブラリを見つけたのでそれを触ったメモです。
テーブル準備
適当なテーブルを作ります。
idとnameしかない適当なテーブルです。
((none))> use test; Database changed (test)> show tables; Empty set (0.00 sec) (test)> create table hoge(id int primary key, name varchar(255)); Query OK, 0 rows affected (0.01 sec) (test)> show tables; +----------------+ | Tables_in_test | +----------------+ | hoge | +----------------+ 1 row in set (0.00 sec) (test)> desc hoge; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(255) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 2 rows in set (0.01 sec) (test)> insert into hoge values(1, "aaa"); Query OK, 1 row affected (0.00 sec) (test)> insert into hoge values(2, "bbb"); Query OK, 1 row affected (0.00 sec) (test)> select * from hoge; +----+------+ | id | name | +----+------+ | 1 | aaa | | 2 | bbb | +----+------+ 2 rows in set (0.00 sec)
コードを書く
事前に go get github.com/jmoiron/sqlx
を実行してます。
main.go
package main import ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ) type Hoge struct { ID int `db:"id"` Name string `db:"name"` } func main() { db, err := sqlx.Connect( "mysql", fmt.Sprintf( "%s:%s@tcp(%s:%s)/%s", "root", "", "localhost", "3306", "test", ), ) if err != nil { panic(err) } hs := []Hoge{} err = db.Select(&hs, "SELECT id, name FROM hoge") if err != nil { panic(err) } fmt.Printf("%+v\n", hs) }
実行してみる
$ls -l total 8 -rw-r--r-- 1 arata staff 486 5 18 21:48 main.go $go run main.go [{ID:1 Name:aaa} {ID:2 Name:bbb}]
ちゃんとデータがbindされてました。
便利。
こちらもおすすめ