Go言語をUbuntu 9.10にインストールする
Googleの開発チームが新しいコンピュータ言語”The Go Programming Language“を発表しました。
このページでは、このGo言語をUbuntu Linuxに導入する方法を紹介します。とはいえ、Go言語のホームページにあるInstalling Goをほぼそのままなぞっただけの内容です。インストールドキュメントはDebian系のLinuxを元に書かれているようで、Ubuntuへの導入は簡単です。
使用した環境はPentium M 1.6 MHzが載ったPC+Ubuntu 9.10 (INTEL 32bit)です。ユーザsimでログインしているため、ホームディレクトリ($HOME)は/home/simです。
環境変数を設定する
最低限、GOROOT,GOOS,GOARCHの3つの環境変数の設定が必要です。また、Go言語関連のバイナリを保存するディレクトリを変更したい場合は、GOBIN環境変数も設定しておく必要があります。
- GOROOTは、Go言語のソースコードを置いておく場所です。まだ作成されていないディレクトリか空のディレクトリを指定する必要があります。
- GOOSはOSを指定します。現時点で指定できるのはlinuxかdarwin (MAX OS Xの場合)だけです。
- GOARCHはCPUのアーキテクチャを指定します。amd64 (INTEL 64bit,EM64T)か386 (INTEL 32bit)を指定します。まだ未完成だそうですがarm (ARMアーキテクチャ用)も準備されているそうです。
- GOBINにはGo言語関連のバイナリファイル(コンパイラやリンカなど)が保存されるディレクトリを指定します。
私の場合は、以下のような設定を~/.bashrc に追加しました。32bit CPUのLinuxなので、GOOSとGOARCHは以下のように指定します。GOBINはデフォルトだと~/binになりますが、私は~/local/binに入れたかったので、GOBINも設定しています。
export GOROOT=$HOME/go export GOOS=linux export GOARCH=386 export GOBIN=$HOME/local/bin
GOBINで設定したディレクトリにPATHが通っていない場合は、以下のように環境変数PATHへGOBINのディレクトリを追加しておきましょう。
export PATH=$PATH:$GOBIN
.bashrcを編集したら、別の新しいターミナルを開くなどして、.bashrcを読み込ませて新しい環境変数を反映させた状態にします。念のために以下のコマンドで設定されているか確認します。
$ env|grep '^GO' GOBIN=/home/sim/local/bin GOARCH=386 GOROOT=/home/sim/go GOOS=linux
ソースコードを取得する
ソースコードは、バージョン管理システムのhg(Mercurial)で管理されていますので、まずhgを導入します。Ubuntuの場合はapt-getで簡単に導入できます。
$ apt-get install mercurial $ hg version Mercurial - 分散構成管理ツール(バージョン 1.3.1)
次にリポジトリからGo言語のソースコードを取得します。
$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT 全チェンジセットを取得中 チェンジセットを追加中 マニフェストを追加中 ファイルの変更を追加中 3976 のチェンジセット(16799 の変更を 2931 ファイルに適用)を追加 作業領域の更新中 1640 個のファイルが更新, 0 個のファイルがマージ, 0 個のファイルが削除, 0 個のファイルが衝突未解決
以下のようにGOROOTで指定されたディレクトリに、Go言語のソースコードやビルド用のファイルがコピーされます。
$ ls ~/go/ AUTHORS LICENSE doc include misc src CONTRIBUTORS README favicon.ico lib pkg test
ビルドし、インストールする
まずGo言語のビルド(コンパイル)に必要なコンパイラやライブラリ、ユーティリティを導入します。
$ sudo apt-get install bison gcc libc6-dev ed
$GOBINで指定したディレクトリが$PATHに存在する事を確認た上で、以下のようにall.bashを実行するとビルドした上で、$GOBINで指定したディレクトリ(指定していない場合は~/bin)にGo言語のコマンドがコピーされます。
$ cd $GOROOT/src $ ./all.bash :(中略) 0 known bugs; 0 unexpected bugs
ビルドには少し時間がかかります。私の環境では7分間ほど掛かりました。ビルドが完了したらGo関連のコマンドが出来ているか確認しましょう。
$ cd ~/ $ ls $GOBIN 6cov 6prof 8c 8l ebnflint godoc gopack goyacc quietgcc 6nm 8a& 8g cgo godefs gofmt gotest hgpatch
このように、 $GOBIN以下にコマンドが出来ているはずです。
動作確認のためにhello,world!プログラムを作成
動作確認のために、恒例のhello,world!プログラムを作成してみましょう。テキストエディタで以下のような内容を作成し、hello.goという名前で保存します。The Go Programming Language Specificationによると、ソースコードの文字コードはUTF-8でないといけないようです。Ubuntu 9.10の環境は標準でUTF-8なのでgeditなどで普通にファイルを作成するとUTF-8で保存されます。
package main import "fmt" func main() { fmt.Printf("日本語でハローワールド\n") }
コンパイルやリンクに使うコマンドは、アーキテクチャ(環境変数GOARCHで指定したもの)によって別の名前が使用されます。386環境(INTEL/AMDの32bit環境)であれば8gコマンドでコンパイルし、8lコマンドでリンクを行います。AMD64環境(INTEL/AMDの64bit環境,EM64T)であれば6gや6lコマンドを使用します。
今回の環境は32bitなので8gコマンドを使用してコンパイルします。コンパイルは一瞬で完了し、hello.8というファイルが出力されます。
$ 8g hello.go $ ls hello* hello.8 hello.go
INTEL 64bit環境であればhello.6というファイルが出来ているはずです。
次にリンクを行います。リンクとは実行に必要なライブラリを結合して、実行可能なファイルを作成する事です。リンクは8lコマンドを使用します。デフォルトでは8.outというファイルが出力されますが-oを付ける事で出力する名前を変更できます。
$ 8l -o hello hello.8 $ ls hello* hello hello.8 hello.go
あとは実行するだけです。C言語のコンパイルと同様にインタープリタ無しで実行可能なファイルが生成されています。
$ ./hello 日本語でハローワールド
日本語のメッセージが問題なく表示されました。これで動作確認は完了です。