漫ろで行こう

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

Posts tagged ‘Go言語’

©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 言語の普及率がどうなるかが見物かもしれません。

©2009 Google

©2009 Google


とりあえず、適当にサンプルプログラムを試して〜と思って@amachangさんとこの「早速 Go 言語を試してみる! – IT戦記」から、Twitter のサンプルプログラムを拝借させていただき、ローカル環境で試してみたところ日本語の表示がされませんでした。
原因不明&未解決なわけですが、一応記事に起こしておこうかなと。
もしかしたら自分だけかもしれないので、問題ないよ!と言う方はコメントいただけると助かります><
ちなみに、チュートリアルにある「Hello, world!」サンプルなどのハードコーディングされたマルチバイトは正常に表示されるようです。取ってきたマルチバイトが表示されないので、多分エンコード周りだとは思うのですが……。

Mac および CentOS で試してみたのですが、不具合(?)が発生したのは Mac 側。
尚、参考にさせていただいたサンプルの twit 取得 URL は常時日本語発言しまくりである自分の user_timeline を取得する用に変更しました。
で、以下が実行した出力結果。テキストに吐き出してもダメでした。

Mac OS X 10.5.8

suzuro2045: Link: GoogleHTTPSPDY – ITmedia http://tumblr.com/xkz40at3k
suzuro2045: Go The Go! Team
suzuro2045: Googlebot
suzuro2045: GooglewwwGo w
suzuro2045: Link: | http://tumblr.com/xkz40aesp
suzuro2045: [][Go][]CORESERVER Go http://bit.ly/29qDAj
suzuro2045: Link: JavaScript – – subtech http://tumblr.com/xkz405m1q
suzuro2045: Link: | nanapi[] http://tumblr.com/xkz3zo991
suzuro2045: CLASH49ageHa
suzuro2045: facebook mixi
suzuro2045: OpeniBoot Android on iPhone Linux OpeniBoot
suzuro2045: RT: @nippondanji: RT @kazeburo: !! RT @etolabo #ficia
suzuro2045: Link: JavaScript – Radium Software http://tumblr.com/xkz3zmo5e
suzuro2045: [iPhone 3Gs Jailbreak]iPhone iDashboard http://bit.ly/1IxrZj
suzuro2045: Link: inforno :: Go& http://tumblr.com/xkz3ziolm

CentOS 5.4

suzuro2045: Link: Google、HTTPを補う高速化プロトコル「SPDY」発表 – ITmedia エン##ープライズ http://tumblr.com/xkz40at3k (Tumblr)
suzuro2045: ココ最近 Go の文字ばっかみてたせいか、ふと The Go! Team を思い出した (Echofon)
suzuro2045: 最近 Googlebot がやたら活動的だなぁ (Echofon)
suzuro2045: Googleキモイwwwさっき書いた記事が「Go 開発環境」とかで検索すると、もう1ページ目に表示されるっっっうぇw (Echofon)
suzuro2045: Link: ネットストア限定先行予約 紙とあそぶレゴ®ブロック | 無印良品ネットストア http://tumblr.com/xkz40aesp (Tumblr)
suzuro2045: [言語][Go][メモ]CORESERVER に Go 言語開発環境を構築してみた http://bit.ly/29qDAj (Twitme for WordPress)
suzuro2045: Link: JavaScript 体感速度を上げるいくつかの手のメモ – 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 – subtech http://tumblr.com/xkz405m1q (Tumblr)
suzuro2045: Link: 最強のブランド!あなたでも贈れる王室ご用達ギフト | nanapi[ナナピ] http://tumblr.com/xkz3zo991 (Tumblr)
suzuro2045: 土曜日のCLASH49参加予定。ageHaでボクと握手! (Echofon)
suzuro2045: facebook 日本法人作ってどうなるんかなぁ。mixi には勝てなそうだけど。 (Echofon)
suzuro2045: OpeniBoot 使って Android on iPhone Linux 的なこと出来ないかと思った##ど、OpeniBoot 開発止まったんか? (Echofon)
suzuro2045: Link: JavaScript によるオーディオ&ビジュアルプログラミング – Radium Software http://tumblr.com/xkz3zmo5e (Tumblr)
suzuro2045: [iPhone 3Gs Jailbreak]iPhone 版ダッシュボード脱獄アプリ iDashboard http://bit.ly/1IxrZj (Twitme for WordPress)
suzuro2045: Link: inforno :: 個人的Go雑感&メモ http://tumblr.com/xkz3ziolm (Tumblr)

なんですかねぇ……。

©2009 Google

©2009 Google


Google 様から新しいプログラミング言語「Go」が発表されて、数日経過しました。
ローカル環境(Mac, CentOS)には環境構築してみたものの、やっぱコンパイルは動作環境毎にするべきだよなぁと、とりあえず CORESERVER へ Go 言語開発環境を構築してみました。
今のところ CORESERVER で何かを動作させようとか、そういう類いのことは一切考えてないんですけどね!

インストールは Installing Go を参考に進めました。

リポジトリからデータを取得して構築するため Python ベースの Mercurial をインストールします。
CORESERVER で Mercurial をインストールする場合、setuptools を用いるため以下のページも参考にしてみてください。
[言語][Python][メモ]レンタルサーバーで Python 追加モジュールのインストール

user@host:~> easy_install mercurial

チェックアウトするディレクトリを作成

user@host:~> mkdir ~/go

インストールに必要な環境変数の設定
export 〜は実際に実行するのと、ターミナルで再ログインしても有効になるように、.bashrc に記述しておきます。

user@host:~> vi ~/.bashrc

以下を実行し、更に .bashrc に記述してください。
CORESERVRER の「サーバーの仕様について」を参考に設定を記述しました。多分問題ないハズ。
また、例によっていつものようにインストール先は local/bin にしてあります。インストール先は適宜、好きなように変更してください。

export GOROOT=$HOME/go
export GOOS=linux
export GOARCH=386
export GOBIN=$HOME/local/bin
export PATH=$GOBIN:$PATH

環境変数がちゃんと設定されているか確認

user@host:~> env | grep ‘^GO’
GOBIN=/virtual/suzuro/local/bin
GOARCH=386
GOROOT=/virtual/suzuro/go
GOOS=linux

Mercurial のリポジトリからソースをチェックアウト。
と、チェックアウトしたソースがあるかの確認。

user@host:~> hg clone -r release https://go.googlecode.com/hg/ $GOROOT
user@host:~> ls ~/go/
AUTHORS doc include LICENSE pkg src
CONTRIBUTORS favicon.ico lib misc README test

インストール。本来であれば all.bash は1回で良いのですが、make.bash の箇所で何故か1度止まってしまいました。なので2回 all.bash を実行しています。決して記載ミスじゃないです><

user@host:~> cd ~/go/src/
user@host:~/go/src> ./all.bash
user@host:~/go/src> ./all.bash

インストールした go コンパイラなどのバイナリがある確認。

user@host:~/go/src> ls ~/local/bin
6cov cgo git godoc python
6nm cython git-cvsserver gofmt quietgcc
6prof easy_install gitk gopack rdoc
8a easy_install-2.4 git-receive-pack gotest ri
8c ebnflint git-shell goyacc ruby
8g erb git-upload-archive hg testall.sh
8l ez_setup.py git-upload-pack hgpatch testrb
bzr gem godefs irb to3.sh

動作確認
テストディレクトリを作成して「こんにちは、世界!」のテストをしてみました。

user@host:~/go/src> mkdir ~/test
user@host:~/go/src> cd ~/test/
user@host:~/test> vi test.go

記述したソース

package main

import “fmt”

func main () {
fmt.Printf(“hello, world!\n”);
}

コンパイルと実行

user@host:~/test> 8g test.go
user@host:~/test> 8l -o test test.8
user@host:~/test> ./test
hello, world!

以上、CORESERVER における Go 言語開発環境構築手順でした。
インストールして何するわけでもないです。とりあえずインストールしてみただけ。

それでは、良い Go on CORESERVER ライフを!

official.The Go Programming Language

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