Ubuntu 9.10 DesktopでGo 〜Google Go 開発環境の構築〜

 

「電車でGo!」を思い出すタイトルだが、早速Googleの新プログラム言語「Go」をUbuntu 9.10 Desktopで試してみましょう!

32ビットのLinux環境でのトライです。AMD64やARMの方は若干異なる部分がありますので、ご注意を。

基本的にはhttp://golang.org/doc/install.htmlに 従ってやってきます。

 

Goにはアーキテクチャ別のコンパイラと「gccgo」というGCCベースの2つのコンパイラが存在します。

アーキテクチャ別のコンパイラの特徴は高速とのことで、8gでGoのコンパイル、8aでアセンブラのアセンブル、8cでCのコンパイル、8lでリンクです。

アセンブラやCともリンク可能ですので、確かにそそるものがあります。

GCCベースのコンパイラの特徴は効率的なコードを生み出すことで、普通にGCCのようにコンパイルできます。でもまだ品質が低いようです。

 

★★★では、まずはアーキテクチャ別のコンパイラの方から作成してみましょう。

手順としては、環境変数の設定、必要なパッケージのインストール、ソースのダウンロード、Goのビルドとインストール、Goプログラムの作成、実行となります。

 

★まずは、環境変数の設定です。端末にて入力します。

 1、Goのルートディレクトリ「$GOROOT」を設定します。権限のこともありますので、例に従ってホームディレクトリに作成し、設定します。
    $ mkdir $HOME/go
    $ export GOROOT=$HOME/go

 2、GoのターゲットOS「$GOOS」を設定します。今回のターゲットOSはLinuxですので、下記のとおりに。
    $ export GOOS=linux

 3、Goをコンパイルするアーキテクチャ「$GOARCH」を設定します。今回は32ビット前提ですので、下記のとおりに。
    $ export GOARCH=386

 4、Goのバイナリをインストールするディレクトリ「$GOBIN」を設定します。ここでも例に従ってホームディレクトリに作成し、設定します。
   このディレクトリは特殊なディレクトリで、Ubuntu9.10Desktopでは、このディレクトリが存在した場合は、ログイン時に自動的にパス を通してくれます。
    $ mkdir $HOME/bin
    $ export GOBIN=$HOME/bin

 5、$GOBINを$PATHにも設定します。
    $ export PATH=$GOBIN:$PATH

 ※ Goのインストールやビルドだけでなく、Goでの開発を行う場合にも、上記の環境変数の設定が毎回必要になります。
   それが面倒だという人は、Bashファイルを作るか、$HOME/.profileの最後の3行を下記のように改変し、パスを通しておくと、毎回起動するだけでGoでの開発が可能になります。

    元の状態
      if [ -d "$HOME/bin" ] ; then
          PATH="$HOME/bin:$PATH"
      fi

    編集後の状態
      if [ -d "$HOME/bin" ] ; then
          PATH="$HOME/bin:$PATH"
          export GOROOT=$HOME/go
          export GOOS="linux"
          export GOARCH=386
          export GOBIN=$HOME/bin
      fi

 

★次に、必要な3つのパッケージを先にインストールします。

 1、Synapticを起動

 2、ビルド環境構築のため「build-essential」をインストール指定

 3、Goをダウンロードするための「mercurial」をインストール指定

 4、インストールするため「bison」をインストール指定

 5、「適用」し、インストールを完了させる

 

★今度は、ソースコードのダウンロードです。

 1、端末にて下記コマンドで$GOROOTにダウンロードします。
    $ hg clone -r release https://go.googlecode.com/hg/ $GOROOT

 

★ダウンロードしたソースコードをビルドしインストールします。

 1、端末にてソースコードのビルドとインストール
    $ cd $GOROOT/src
    $ ./all.bash

 2、ソースコードのビルドとインストールには結構時間がかかります。最終的に下記のようなメッセージが現れて終了です。2行目のNはリリースによって異 なる数字になるそうです。
    --- cd ../test
    N known bugs; 0 unexpected bugs

 

★プログラムの作成と実行

 1、エディタで下記コードを記載し、hello.goで保存しましょう
    package main
    
    import "fmt"
    
    func main() {
        fmt.Printf("hello, 世界¥n")
    }

 2、端末にてコンパイル
    $ 8g hello.go

   名前を指定してコンパイルしたい場合は下記のように-oオプションにて指定
    $ 8g -o filename hello.go

 3、リンク
    $ 8l hello.8

   名前を指定してリンクしたい場合は下記のように-oオプションにて指定
    $ 8l -o filename hello.8

 4、実行
    $ ./8.out

 5、結果
    hello,世界

    日本語などのマルチバイト文字が得意みたいです。

 

★★★それでは、引き続いて、gccgoを作ってみましょう!

この作業は基本的にhttp://golang.org/doc/gccgo_install.htmlに従って行います。

手順は必要なパッケージのインストール、GCC&Go関係のソースコードのダウンロード、makeです。

パッケージ管理システムのSubversionがSynapticでインストールしたケースとapt-getでインストールしたケースで挙動が異なりまし たので、Synapticは使わず、端末のみでやってしまいます。

 

★必要なパッケージのインストール

  1、ビルド環境のbuild-essentialやパッケージ管理システムのSubversionなど必要なパッケージを一気にインストールします。
    $ sudo apt-get install build-essential subversion libgmp3-dev libgmpxx4ldbl libmpfr-dev flex

★Subversionでソースコードを落とします。

  1、これには45分くらい時間がかかりました。15万を超えるファイルを落としますので、それなりのストレージの空き領域が必要です。
    しっかり見てると先人たちの苦労が身にしみて、良い経験になりますので、しっかり見ておきましょう。
    $ svn checkout svn://gcc.gnu.org/svn/gcc/branches/gccgo gccgo

  2、作業用ディレクトリの作成。
    $ mkdir objdir
    $ cd objdir

  3、次はmakeの準備です。
    $ ../gccgo/configure --enable-languages=c,c++,go --with-arch=i686

cp $HOME/gccgo/libstdc++-v3/include/parallel/* $HOME/objdir/i686-pc-linux-gnu/libstdc++-v3/include/parallel

★では、makeしましょう。

  1、makeには、とても時間がかかります。3時間以上かかりました。
    この文章を書きながらやっていましたので、全ては見てはいませんが、どうもいくつか警告やエラーが出ていたような気が・・・
    $ sudo make

  2、これでgccgoができあがりましたので、次はインストールです。これは、スーパーユーザ権限でやらないと駄目です。
    $ sudo make install

 

Native Clientの言語候補ということで、試してみましたが、別にC言語で不便がない人なら、いらないような気がします。
Native Clientも独自仕様が強すぎると他のブラウザが追従してきませんので、かつてのIEのように、Chromeでしか見られないサイトや動かないアプリが 生まれてしまいそうです。
Native ClientはWebをめちゃめちゃ快適にする、素晴らしい技術ですので、Goなんて作ってないで、もっと汎用的な仕様にしたほうが良いのでは?という気 がします。

 

ここでの文章、画像、検証結果などは全てDreamHopeに著作権があります。リンクに関してはTopLink、DeepLinkともに構いませんが、全部・一部の「学術論文等許諾の不必要な引用」以外の引用に関しては禁止します。

Copyright (C) 2009 DreamHope All Rights Reserved .  Access: