Goでmysqlライブラリ作りました


RFC: Database API for GoということでPeterさんが提案していて
goを触るがてらMySQL接続を作り始めたところ、PeterさんとEdenさんから一緒にやらないかといわれたので
Peterさんが提案してるRFC: Database API for Goの形で作成してみました。

追記

FetchManyとFetchAllも実装してみました。
あとは、パラメータのbindを行えば、そこそこ使い物になるかと思います。
http://yone098.github.com/go-mysql/

    s, e = c.Prepare("SELECT * FROM __hello ORDER BY i ASC");
    cur, e = c.Execute(s);
    rows, e = cur.FetchAll();
    fmt.Printf("%s\n", rows);
    for _, y := range rows {
        fmt.Printf("data: %s\n", y);
    }
    cur.Close();

sqlitemysqlでのsample

go-mysql sample
info := mysql.ConnectionInfo{
    "host": "localhost",
    "port": 3306,
    "uname": "yone098",
    "pass": "password",
    "dbname": "golang"
};
c, e := mysql.Open(info);
s, e = c.Prepare("SELECT * FROM __hello ORDER BY i ASC");
tuple, e := cur.FetchOne();
fmt.Printf("%s\n", i, tuple[0]);
cur.Close();
e = c.Close();

go-sqlite sample

info := sqlite3.ConnectionInfo{"name": "test.db"};
c, e := sqlite3.Open(info);
s, e := c.Prepare("SELECT * FROM users");
c, e := c.Execute(s);
d, e := cc.FetchOne();
fmt.Printf("data: %s\n", d);
e = cc.Close();
e = c.Close();


正直、現在のDB用のAPIは、使いづらいというかDBごとの差異をうまく吸収出来てないので
(継承元のdb.goがsqlite寄りな実装になっているため)、これから良い方向になればと思います。


JDBCは良く出来てるなと今更ながら感心しました。

Go is not Hiromi Go!