【ただの技術備忘録】GoogleのGoをCentos5.3にインストールしてみた

原文は以下のページ
http://golang.org/doc/install.html


Introduction
BSDライセンスよー、GCC使ってるからねーてところ。

Environment variables
環境変数を設定。

  1. $GOROOTにはGoのルートを指定するらしい。例では$HOME/goと書いてる。
  2. $GOOSには使用するOS、今回はlinuxなのでlinuxを入れておく。
  3. $GOARCHはCPUアーキテクチャを。今回は386.
  4. $GOBINはオプションでバイナリへのPATHらしい。$PATHが設定されてればそれを使う模様。デフォルトで$HOME/binも読み込むのか?よくわからん。一応書いておく。

一応、homeにはbinディレクトリを作っておく。
※追記:$HOME/binにバイナリをインストールするから、$HOME/binへPATH通しておけよ、てことのようだ

# mkdir go
# mkdir bin
# export GOROOT=$HOME/go
# export GOOS=linux
# export GOARCH=386
# export PATH=$PATH:$HOME/bin
# source .bashrc

設定したら反映しろ、とのことなので最後の行を実行。


Fetch the repository
Mercurialをインストールしてないとhgコマンドが使えないらしいので、インストールしておく。が、インストールにはeasy_installを使うらしいのでpython-setuptoolsをインストールしておく。

# yum install python-setuptools
# easy_install mercurial

で、リポジトリからダウンロード

# hg clone -r release https://go.googlecode.com/hg/ $GOROOT
requesting all changes
adding changesets
adding manifests
adding file changes
added 3976 changesets with 16799 changes to 2931 files
updating working directory
1640 files updated, 0 files merged, 0 files removed, 0 files unresolved

Install Go
GoのToolchainはCで書いてるから、gccとかその辺準備しろと。

yum install bison gcc libc6-dev ed

終わったら、マニュアルどおりにやってみる。

# cd go/src
# ./all.bash
〜中略〜
make[2]: Leaving directory `/root/go/src/pkg/os'
--- FAIL: os_test.TestRemoveAll
        RemoveAll "_obj/_TestRemoveAll_" succeeded with chmod 0 subdirectory?(extra *os.PathError=lstat _obj/_TestRemoveAll_: no such file or directory)
FAIL
make[1]: *** [test] エラー 1
make[1]: ディレクトリ `/root/go/src/pkg/os' から出ます
make: *** [os.test] エラー 2

なんてこった。と、調べてみたらあった。
http://code.google.com/p/go/issues/detail?id=22
どうやら、rootディレクトリでは出来ませんよ、てことらしい。ノーマルユーザーでやってくれって書いてるので、一般ユーザーのホームディレクトリで同様の作業を繰り返す。

./all.bash
make.bash: line 41: /home/okt/bin/quietgcc: 許可がありません

ほ、ほわー!?と思ったら、binディレクトリがroot権限になっていたのでchownでユーザ権限に戻しておく。再び繰り返す。

./all.bash
〜中略〜
--- cd ../test
0 known bugs; 0 unexpected bugs

上記のコメントが出ればおkらしい。

Writing programs
コンパイルの仕方。

# 8g hoge.go
# 8l hoge.8

実行

# ./8.out

と言うことらしい。以下原文。
The identifier letters for 386 and arm are ‘8’ and ‘5’. That is, if you were compiling for 386, you would use 8g and the output would be named file.8.
サイトだと6gとかなってるけど、8でやるのがこの環境だと正しいらしい。ソコは適宜。以下サンプルプログラム。
hoge.go

//mainパッケージの宣言?
//Every Go source file declares, 
//using a package statement, 
//which package it's part of.
package main

//Package implementing formatted I/O.
//とあるのでI/O系のフォーマットか?
import "fmt"

func main() {
    //↓注目すべきは、セミコロンが無いこと
    //サンプルでもあったりなかったり
    //どっちでもいいっぽい
    fmt.Printf("hoge, world\n")
}

実行結果

# 8g hoge.go
# 8l hoge.8
# ./8.out
hoge, world

ココまで。