漫ろで行こう

自由気まま過ぎる、ギークになりたい男の子の話

©2009 Google

©2009 Google

© 1995-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.

© 1995-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.


自分で 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 をインストールします

[root@host ~]# yum install git

git の初期設定
git のグローバル設定にユーザー名とメールアドレスを設定します

[user@host ~]$ git config –global –list
[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 ~]$ git clone git://github.com/eden/mysqlgo.git
[user@host ~]$ ls mysqlgo/
LICENSE README.markdown gcc.patch mw.h mysql_test.go
Makefile example.go mw.c mysql.go

mysqlgo のインストール

[user@host mysqlgo]$ make install
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 データの作成

DROP TABLE IF EXISTS `hoge`;
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]$ mkdir -p ~/test/mysqlgo
[user@host mysqlgo]$ cd ~/test/mysqlgo/
[user@host mysqlgo]$ vi mysqlgo.go

コードは以下のような感じで。手抜きも良いとこです。

package main

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]$ 8g mysqlgo.go
[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 言語の普及率がどうなるかが見物かもしれません。

Related Posts

  1. [言語][Go][メモ]CORESERVER に Go 言語開発環境を構築してみた
  2. [言語][C#]Fatal error encountered during command execution
  3. [言語][C#]OdbcDataReader で組込参照型(string)が System.Byte[] になった罠
  4. [言語][Go]異なる OS においてマルチバイト文字の取り扱いに不具合?
このエントリーをはてなブックマーク この記事をクリップ! このエントリーをdel.icio.usに追加

Leave a Reply

Get Adobe Flash playerPlugin by wpburn.com wordpress themes
Proudly powered by WordPress. Theme developed with WordPress Theme Generator.
Copyright © 漫ろで行こう. All rights reserved.