みんな大好きGo言語の Windows 用バイナリRC版

Go言語は最近 Go 1 というメジャーリリースに向かって開発が進んでいるようなのですが、RC版の Windows 用バイナリがリリースされていたので試してきましたよ。皆もレッツGo!

1. ダウンロードする

http://code.google.com/p/go/downloads/list
ここにあります。

2. インストールする

特にインストール先変えずにガンガン次へで進めました。
C:\Go にインストールされました。

3. 使ってみる

じゃあメモ帳でも開いて、ソースファイルのひとつでもこさえてみましょう。
mkdir test
cd test
notepad test.go
ソースの中身はこんな感じのを打ってみたらどうでしょう?
package main

import (
 "log"
 "fmt"
 "io/ioutil"
 "net/http"
)

func main(){
 resp, err := http.Get("http://example.org/")
 if err != nil {
  log.Fatalln(err)
 }

 defer resp.Body.Close()
 body, err := ioutil.ReadAll(resp.Body)
 if err != nil {
  log.Fatalln(err)
 }

 fmt.Println(string(body))
}

4. コンパイルする

go build
コマンドプロンプトでこれを打つだけで「test.exe」ができました。

5. 実行してみる

test
HTML が出力されたら成功ですねー。

6. 外部のライブラリも入れてみる

http://code.google.com/p/snappy-go/
少し前に話題になった高速な圧縮展開アルゴリズムが売りの snappy を使ってみましょう。
snappy は Mercurial を使ったリポジトリ上で管理されているので Windows 版の Mercurial が必要です。インストール済みって前提で進めますねー。
go get code.google.com/p/snappy-go/snappy
これだけでインストール完了してるはず。
go list all
これでずらっと出てくる中に code.google.com/p/snappy-go/snappy が出てくるはずですねー。

7. snappy も使ってみる

test.go をこんな感じで修正してみました。
package main

import (
 "code.google.com/p/snappy-go/snappy"
 "fmt"
 "io/ioutil"
 "log"
 "net/http"
)

func main(){
 resp, err := http.Get("http://example.org/")
 if err != nil {
  log.Fatalln(err)
 }

 defer resp.Body.Close()
 body, err := ioutil.ReadAll(resp.Body)
 if err != nil {
  log.Fatalln(err)
 }
 fmt.Println("original size:", len(body))

 encoded, err := snappy.Encode(nil, body)
 if err != nil {
  log.Fatalln(err)
 }

 fmt.Println("encoded size:", len(encoded))

 decoded, err := snappy.Decode(nil, encoded)
 if err != nil {
  log.Fatalln(err)
 }
 fmt.Println("decoded size:", len(decoded))
}
受信したバイト数と、圧縮後のバイト数と、展開後のバイト数を表示するだけです。
go build
test
original size: 2966
encoded size: 1652
decoded size: 2966
こんな感じになりました。面白い!

8. 困った時は

・go だけを打つとどんなコマンドがあるのか大体出ます

・godoc -http=:6060 と打つと http://localhost:6060/ がマニュアルになります
自分が追加したパッケージもパッケージ一覧に表示されるし便利ですよ

以上!