Go Language

プログラミング言語Goとは

 プログラミング言語Go(以下,単にGoと略)は,Googleが開発したC言語チックな オブジェクト指向プログラミング言語です. Googleの崇高な頭脳の持ち主が,既存のプログラミング言語に対して 「こんなん使ってられるかぁ、ボケぇ」ってことで作り始めました.

 とりあえずこのページでは,このGoを使える環境を,ubuntu整えて,hello worldくらいを 実行してみるところまで解説します.もしかしたら調子こいて,新たにトピック立ててGoについて 解説するかもしれません.

Goのインストール

 私はubuntu9.04で行ったのですが,参考にした日経Linux2010年2月号はubuntu9.10で行っていました. それ以前のOSのバージョンで同じように出来るかどうかは,保証しかねます. でも多分,出来るんじゃないかな?勘.

 まず,端末上から環境変数を設定します. ここではわかりやすいように,ホームディレクトリ内にGo用の データを置くディレクトリを作成し,その中でインストールを行います. もし,Goをホームディレクトリ以外の所に置いてインストールしたいと思うのであれば, 適宜,下のコマンドの引数を変えてください.

cd
mkdir go
mkdir bin
export GOROOT=$HOME/go
export GOARCH=386
export GOOS=linux
export GOBIN=$HOME/bin
export PATH=$PATH:$HOME/bin
sudo apt-get install python-setuptools python-dev
sudo easy_install mercurial

 Webを徘徊していて,一度,最後のeasy_install mercurialがうまくいかない,という 人を見かけました.その人は普通にapt-get installでやったそうです.

 あとは,pythonによるバージョン管理のhgコマンドを用いて,ダウンロードして, コンパイルするだけです.

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

 私はこのコマンドを打つ前に,なぜか不安になり,Googleのリポジトリを 追加してから行いました.今思えばそれをしなくてもうまく行くはずだと思いますが, 万が一うまくいかなかったら,リポジトリを追加してみてください. http://www.google.com/linuxrepositories/aboutkey.html のhttps://dl-ssl.google.com/linux/linux_signing_key.pubから キーをダウンロードしてきて,[システム]-[システム管理]-[ソフトウェア・ソース]- [認証]-[鍵ファイルのインポート]でダウンロードしたキーを選択. 同じウィンドウの[サードパーティのソフトウェア]タブから[追加]で https://dl-ssl.google.com/linux/linux_signing_key.pubを入力し, ソースを追加.あとはアップデートをしてください.

 あとはダウンロードしたものをコンパイルしましょう.

cd
cd go/src
./all.bash

 ホームディレクトリにgoディレクトリを作成しなかった人は適宜変更してください. 私の場合はこの3行目でコンパイルエラーが発生し, 調べてみると中国エンコードがどこかで使われておりそれが認識出来てないことがわかりました. 解決策としては,./all.bashの代わりにLANG=en_US ./all.bashとしてやると, うまくいきました.

Goプログラムをコンパイルする

 使用している計算機のアーキテクチャによってコンパイルが少し違います. たぶん多くの人は386アーキテクチャだと思います. ただし,最近では64ビット対応のために,AMD64アーキテクチャを利用している人も いるかもしれません.ここでは386アーキテクチャ用に書きますが, AMD64の人は8を6に,AMDの人は8を5に置き換えて試してください. hello.gというGoのプログラムをコンパイルするならこうなります.

8g hello.g
8l hello.8
./8.out

 上2行で実行ファイル8.outが生成され,それを3行目が実行しています. これだけです.

hello.g

 とりあえず,hello worldを標準出力するhello.gくらいだけ書くと, こうなります.hello.g

 フォーマット形式の入出力を行うパッケージfmtを用いてfmt.Printfで実装します. これだけ見ても,C言語チックなオブジェクト指向という意味が分かると思います. 構文などは非常にC言語に似ています.