自分で Wrapper を書いたわけじゃないのですが、やっぱり MySQL に接続してみたいよね!ということで、GitHub に上がってるソーシャルコード mysqlgo を利用させていただき、接続および select クエリの発行をしてみました。
だから何だって話になったら元も子もないですが、完璧自己満足の世界ですので、あしからず。
テスト環境
- CentOS 5.4
- MySQL 5.1.38
まず、mysqlgo のソースコードを入手してインストールする必要があるのですが、Zip や Tar などのアーカイブをダウンロードする方法(mysqlgo のページに download ボタンがあります)と、git から clone を取得する方法の2パターンあります。
自分はまだ試したことがなかったので、後者の git を用いる方法で取得しインストールしてみました。
git のインストール
root ユーザーになって yum から git をインストールします
git の初期設定
git のグローバル設定にユーザー名とメールアドレスを設定します
[user@host ~]$ git config –global user.name “Suzuro”
[user@host ~]$ git config –global user.email hoge@hoge.com
[user@host ~]$ git config –global –list
user.name=Suzuro
user.email=suzuro2045@gmail.com
mysqlgo のチェックアウト
チェックアウトとチェックアウトしたファイルの確認。
[user@host ~]$ ls mysqlgo/
LICENSE README.markdown gcc.patch mw.h mysql_test.go
Makefile example.go mw.c mysql.go
mysqlgo のインストール
cp _obj/mysql.a /home/suzuro/go/pkg/linux_386/mysql.a
gcc -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -fasynchronous-unwind-tables -DUNIV_LINUX -DUNIV_LINUX -o mw.o -c mw.c
gcc -m32 -shared -lpthread -lm -o mysql_mysql.so mysql.cgo4.o mw.o -rdynamic -L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -lmygcc
cp mysql_mysql.so /home/suzuro/go/pkg/linux_386/./mysql_mysql.so
以上で mysqlgo のインストールは完了です。なんてお手軽!
次に、テスト用 DB およびテーブル、サンプルデータを MySQL に作成し、mysqlgo を利用したテストコードを書いて実行してみます。
テスト用 MySQL データの作成
CREATE TABLE `hoge` (
`id` bigint(20) NOT NULL auto_increment,
`str` varchar(255) collate utf8_bin NOT NULL,
`cdate` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `cdate` (`cdate`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
insert into `hoge`(str) values
(‘aiueo’),
(‘あいうえお’),
(‘αβγ’),
(‘абв’);
mysql> select * from hoge;
+—-+—————–+———————+
| id | str | cdate |
+—-+—————–+———————+
| 1 | aiueo | 2009-11-17 12:40:53 |
| 2 | あいうえお | 2009-11-17 12:40:53 |
| 3 | αβγ | 2009-11-17 12:40:53 |
| 4 | абв | 2009-11-17 12:40:53 |
+—-+—————–+———————+
4 rows in set (0.00 sec)
mysqlgo テストコードの作成
まず、作業用のディレクトリを作成し、そこにコードを置きたいと思います。
[user@host mysqlgo]$ cd ~/test/mysqlgo/
[user@host mysqlgo]$ vi mysqlgo.go
コードは以下のような感じで。手抜きも良いとこです。
import (
”mysql”;
”fmt”;
)
func main ()
{
conn := mysql.NewConn();
err := conn.Connect(&mysql.ConnInfo{“localhost”, 3306, ”root”, ”", ”test”});
if err != nil {
panic(“Connect Error”);
}
cur := conn.Cursor();
cur.Execute(“select * from hoge;”);
tuple, err := cur.FetchOne();
for ; err == nil && tuple != nil; tuple, err = cur.FetchOne()
{
fmt.Println(tuple);
}
conn.Close();
}
コンパイルして実行。
[user@host mysqlgo]$ 8l -o mysqlgo mysqlgo.8
[user@host mysqlgo]$ ./mysqlgo
[1 aiueo 2009-11-17 12:40:53]
[2 あいうえお 2009-11-17 12:40:53]
[3 αβγ 2009-11-17 12:40:53]
[4 абв 2009-11-17 12:40:53]
以上で終わり。
ドキュメントがないので、サイトの Synopsis を参考にというかそのまま書かせてもらったのですが、今後 mysqlgo が一般的になってくるのか、はたまた MySQL AB からオフィシャルで Connector が出てくるのか。
かなり気にはなりますが、それ以前に今後の Go 言語の普及率がどうなるかが見物かもしれません。

