2009-11-11
早速 Go 言語を試してみる!
はじめに
Google から新プログラミング言語 The Go Programming Language が発表されましたね!
というわけで、さっそく試してみたいと思います。
環境は Mac OS X 10.6
インストール
さっそくインストール
Getting Started - The Go Programming Language を見ながら
環境の準備
ディレクトリを作る
amacbook% cd ~ amacbook% mkdir go amacbook% mkdir bin
環境変数の設定をする。~/.zshrc に以下を追加
# Go 用 export GOROOT=$HOME/go export GOOS=darwin export GOARCH=amd64 export GOBIN=$HOME/bin export PATH=$GOBIN:$PATH
amacbook% sudo port install mercurial
ソースコード取得
amacbook% hg clone -r release https://go.googlecode.com/hg/ $GOROOT
ビルド
amacbook% cd $GOROOT/src amacbook% ./make.bash
完了!(run.bash は HTTP のテストで失敗したので、やっていない)
$GOBIN にインストールされたファイル
$ ls $GOBIN 6a 6c 6g 6l 6nm cgo ebnflint godefs godoc gofmt gopack gotest goyacc hgpatch quietgcc
Hello world を書いてみる
適当な作業用ディレクトリを作って
amacbook% mkdir -p ~/dev/go amacbook% cd ~/dev/go
hello.go ファイルを作成
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
コンパイル
6g コマンドでコンパイル
amacbook% 6g hello.go
こうすると hello.6 というオブジェクトファイルができる
6nm でオブジェクトのシンボルを見れる
amacbook% 6nm hello.6 : T main·main :
リンク
6l コマンドでリンク
amacbook% 6l hello.6
6.out が出来る(別名が良ければ -o オプション)
実行
amacbook% ./6.out hello, world amacbook%
おおおおおおおおおお
C 言語とのリンク 1
6c コマンドを使って c ファイルをコンパイルすれば 6l でリンクできるみたい
amacbook% 6c foo.c amacbook% 6g bar.c amacbook% 61 foo.6 bar.6
C 言語とのリンク 2
GCC の gccgo branch を使えば既存の C/C++ ライブラリもリンクできるみたい
Setting up and using gccgo - The Go Programming Language
twitter public_timeline を取得してみる
http.Get は何故か動かなかったので net.Dial を使った。
package main
import (
"json";
"bufio";
"io";
"net";
)
func main() {
if con, err := net.Dial("tcp", "", "twitter.com:80"); err == nil {
io.WriteString(con, "GET /statuses/public_timeline.json HTTP/1.1\r\n");
io.WriteString(con, "Host: twitter.com\r\n");
io.WriteString(con, "User-Agent: Hoge\r\n");
io.WriteString(con, "\r\n");
reader := bufio.NewReader(con);
for {
line, err := reader.ReadString('\n');
if err != nil {
if err.String() == "EOF" {
j, _, _ := json.StringToJson(line);
for i := 0; i < j.Len(); i++ {
data := j.Elem(i);
print(data.Get("user").Get("screen_name").String() + ": " + data.Get("text").String() + "\n");
}
}
break;
}
}
}
}
json パーサーとかもついてて簡単!
goroutine がおもしろそう。。でも時間がないのでまた今度
ちょっと goroutine
やっぱり、ちょっとだけ goroutine を触ってみる
package main
func main() {
ch := make(chan int);
go func() {
// TODO something
ch <- 0;
}();
go func() {
// TODO something
ch <- 0;
}();
<-ch;
<-ch;
}
Channel というものを使って上のようなコードのように書けば、簡単に二つの処理を同時に走らせたりできる。
func() { } () とかは、クロージャで JavaScript おなじみの記法ですねー。
(追記) id:moriyoshi さん相変わらず、すげー
トラックバック - http://d.hatena.ne.jp/amachang/20091111/1257928890
- muddy brown thang - なんか Go で書くのが流行ってるみたいなので
- Jungle Java - Google が新しいプログラミング言語 Go を発表
- 崩壊現実-全てはvirtualに収束する- - GO! for Ubuntu 9.10
- Tenの放浪記〜electric wave days〜 - Googleが新しく開発したプロ...
- とあるつくみんの研究日誌 - Mac OSX 10.5.8でGOを動かす.
- Think different. /*ここはチラシの裏*/ - GOが熱い一日
- Big Sky :: おくればせながらGoってみた。
- プログラミング言語goで書く その1 ハローhogehoge
- y-kawazの日記 - Go言語を試す
- 今日もコーディング日和 - Google GO
- Nunockyの日記 - The Go Programming Language
- Nunockyの日記 - The Go Programming Language
- あいまいスパーク - インストール
- あいまいスパーク - Goの流れにのってみる
- あいまいスパーク - 〜〜インストール
- [言語][Go]異なる OS においてマルチバイト文字の取り扱いに不具合?
- Windows で Google Go (初心者まとめ) gOS : Linuxディストリビュー...
- naokmrの日記 - Macでプログラミング言語Goを試してみる
- Adukan - golangという言語
- 簡潔で覚えやすいタイトルを3秒で思いつく程度の能力 - id:JAPLJと...
- 「早速 Go言語を試してみる!」をgoで書き直してみた
- ラボ広報担当の備忘録 - 2009/11/16の社内メールマガジン編集後記か...
- おれさま新聞 - ●Firefoxのメモリ開放
リンク元
- 1009 http://d.hatena.ne.jp/moriyoshi/20091111/1257929640
- 1008 http://b.hatena.ne.jp/hotentry
- 772 http://reader.livedoor.com/reader/
- 475 http://b.hatena.ne.jp/hotentry/it
- 376 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=fzT&q=Go+言語&btnG=検索&lr=lang_ja&aq=f&oq=
- 357 http://www.google.co.jp/reader/view/
- 327 http://www.google.com/reader/view/
- 310 http://d.hatena.ne.jp/
- 274 http://twitter.com/
- 238 http://www.nobodyplace.com/mutter/2009/03/20/140902.php
