Go を Windows でサクッと試してみる


Goとは

Google の20%プロジェクトから生まれた新しい言語です。本家は以下です。
http://golang.org/

表現力が豊かであり、並列性のサポートがあり、ガベージコレクションがあるシステム記述言語とされています。Go の特徴として以下のような紹介がされています。

ベター Java としての Scala、ベター C としての Go といったところでしょうか。
現時点で Go のサポートは LinuxMacOS となっていますが、Windows 環境で Go が試せる go-windows というプロジェクトがあります。ここでは go-windows をサクッと試してみます。

go-windows のダウンロードと設定

go-windows は以下のサイトからダウンロードできます。
http://code.google.com/p/go-windows/

go-1.zip をダウンロードして解凍すると go ディレクトリが得られます。ここでは Cドライブの直下に go ディレクトリを置いたものとします。
go ディレクトリの bin の中に 8g.exe があります。これが32ビットx86用のgoコンパイラです。8l.exe が同リンカです。ちなみに6が付くコマンドは64ビットx86用のコマンドとなります。


環境変数の登録を行う必要がありますが、ここではコマンドプロンプトで設定するだけにします。コマンドプロンプトを立ち上げ、以下のコマンドを実行します。

set GOROOT=C:\go
set GOOS=mingw
set GOARCH=386

set PATH=%PATH%;c:\go\bin;

Hello World

伝統に従いHello Worldから。適当なディレクトリに helloworld.go を作成します。

package main

import fmt "fmt"

func main() {
   fmt.Printf("Hello, world;\n");
}

ではコンパイルしましょう。先ほど環境変数を設定したコマンドプロンプトにて以下のコマンドにてコンパイルとリンクを実施します。

8g helloworld.go
8l -o helloworld.exe helloworld.8

これでカレントディレクトリに hello.exe が出来ているはずです。

helloworld.exe
Hello, world;

Hello, world;が出力されました。

echoプログラム

も少し複雑な例で、echo を試してみます。
echo.go として以下を作成します。ファイルの保存は UTF-8 としてください。

package main

import ( 
   "os";
   "flag"; // コマンドラインオプションパラメータ
)

var omitNewline = flag.Bool("n", false, "don't print final newline")

const (
   Space = " ";
   Newline = "\n";
)

func main() {
    flag.Parse(); // コマンドライン引数の解析
    var s string = "";
    for i := 0; i < flag.NArg(); i++ {
        if i > 0 {
            s += Space
        }
        s += flag.Arg(i);
    }

    if !*omitNewline {
        s += Newline
    }
    os.Stdout.WriteString(s);
}


先ほどと同じようにコンパイルします。

8g echo.go
8l -o echo.exe echo.8

echo.exe が出来ているはずです。実行してみましょう。

>echo hoge
hoge

まとめ

Windows環境で簡単なGoプログラムを作成しました。言語仕様はシンプルで、コンパイルも非常に早く、良い印象です。ガベージコレクションがあり、ネイティブな実行ファイルが吐けるというとD言語を思い浮かべますが、時間のあるときにでも比較してみようかと思います。
コンパイルしてリンクしてという操作で、遠い昔の学生の頃を思い出しました・・