Googleのプログラミング言語であるGoの情報を紹介しています

サイボウズラボの秋元さんも「GoogleのGo言語によるプロジェクトが既にいくつか」のエントリーで触れてますが、「Go」はC言語などと同じで、検索がやっかいです。

とりあえず「google go」で情報を探してますが、Google Appsの「Go Google」キャンペーンなどもあるので、アラートメールなどの精度も低いです。

公式サイトのURLが「golang.org」なので、海外ではgolangと呼ばれるようになるのでしょうか。日本では、B・C言語に倣って「Go言語」になる気もします。

現状、Google GoはLinux版とMac版のみのようです。出来れば、Windows版も出して欲しいです。

1. 環境の設定

OSはCentOS5です。ちょっと古いサーバなので、プロセッサはi386。
・Go のソースコードのルートディレクトリを指定
export GOROOT=/usr/local/go
・Go をインストールするOSを設定
export GOOS=linux
・CPUのアーキテクチャ。i366なので386を設定
export GOARCH=386
・Goのバイナリのインストール先を指定
export GOBIN=/usr/local/bin
・envコマンドで設定を確認
# env|grep GO
GOBIN=/usr/local/bin
GOARCH=386
GOROOT=/usr/local/goOSはCentOS5です。ちょっと古いサーバなので、プロセッサはi386。

・Go のソースコードのルートディレクトリを指定
export GOROOT=/usr/local/go

・Go をインストールするOSを設定
export GOOS=linux

・CPUのアーキテクチャ、32ビット系なので386を設定。64ビット系はamd64。
export GOARCH=386

・Goのバイナリのインストール先を指定
export GOBIN=/usr/local/bin

・envコマンドで設定を確認
# env|grep GO
GOBIN=/usr/local/bin
GOARCH=386
GOROOT=/usr/local/go

2.Python用ツールのインストール
Pythonのライブラリをインストールする際に、easy_installというツールを利用するため、python-setuptoolsをサーバにインストールします。

yum install python-setuptools

次に、Pythonで実装されたバージョン管理システムのMercurial をインストールします。

easy_install mercurial

3.Goソースコードのダウンロード
hgコマンドを用いて、goのソースコードをダウンロードします。

hg clone -r release https://go.googlecode.com/hg/ $GOROOT

4.Goのインストール

Go ソースコードのsrcディレクトリ以下に移動
cd $GOROOT/src

コンパイルのコマンドを実行
./all.bash

これが以外に上手くいかない。まずは、bisonが足りないと怒られたので、
bison -y -d cc.y
make: bison: Command not found
make: *** [y.tab.h] Error 127

と怒られてたので、

yum install bison

で、bison をインストール。

rootでコンパイルを実行したところ、以下のエラーがでる。どうやらrootユーザだとコンパイルが上手くいかない。

gopack grc _test/path.a _gotest_.8
make[2]: Leaving directory `/usr/local/go/src/pkg/path’
— FAIL: path.TestWalk
1. error expected, none found
node testdata/d/x mark = 2; expected 1
node testdata/d/y mark = 2; expected 1
node testdata/d/z mark = 2; expected 1
node testdata/d/z/u mark = 2; expected 1
node testdata/d/z/v mark = 2; expected 1
FAIL
make[1]: *** [test] Error 1
make[1]: Leaving directory `/usr/local/go/src/pkg/path’
make: *** [path.test] Error 2

一般ユーザに変更。/usr/local/go の所有権を丸ごと一般ユーザに設定。
su user
chown -R user:user /usr/local/go
cd $GOROOT/src
./all.bash

— cd ../test
0 known bugs; 0 unexpected bugs

5.Go 実行
ファイルを作成し、
touch hello.go
以下のコードを記述する。

package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}

コンパイルは、8gコマンドを使い、8lコマンドでリンクを作成します。CPUが32系は8、64系なら6g,6lとなります。
8g hello.go
8l hello.8

以下のように実行します。
./8.out

Goの公式ページ(英語)を確認すると、Goの特徴は、

  1. fast – 速い
  2. safe – 安全
  3. concurrent – 平行
  4. fun – 柔軟
  5. open source – タダ

と記載されてます。

開発者の1人でもあるケン・トンプソン氏は、Google Goを
Pytonのような動的言語の開発スピードと、C・C++のようなコンパイル言語の安全性を組み合わせたもの
Goの検証実験では、大きなバイナリでも数秒で処理が完了する
コンパイル後の実行速度は、C言語に匹敵する
Goの最大の目的は、スピードアップである
と語っているようです。

一方、別の開発者の1人であるロブ・パイク氏は、
「Goは静的言語の効率と動的言語の分かりやすさを併せ持つ」
Goはキャストが明示的だり、ポインタ演算は提供しないなど、安全性が高い
並行性と通信性に優れている
コンパイルが非常に高速である
と述べています。

要は、高速で安全性が高く非常に便利な言語であるという事ですね。

2009年11月10日、Googleが新言語である「Go」をOSSとして公開しました。ライセンスはBSDです。

C++のようにCを拡張して作られた訳ではなく、C言語をより高速に、そしてより便利にした言語仕様のようです。まだ試して無いのですが、近日環境を整えて触ってみます。

「Go」の開発者は、Plan9のロブ・パイク氏、B言語のケン・トンプソン氏、Google Chromのロバート・グリースナー氏など、まさにオールスター状態です。非常にスジの良い言語になりそうな予感がします。

ロブ・パインク氏は53歳、ケン・トンプソン氏はなんと66歳です。一介のプログラマとして、50歳を超えてもなおプログラミングに対する情熱を失わない姿勢に感動します。