2013年04月14日

いつの間にかGAEに採用された、Go言語を調べてみる

いつもどおりニュースが遅い濃密金石文ですが。

Herokuが面白いけど1アカウント1つのアプリケーションしかつくれなくて(無料枠では)、なんか他にないかなと思ってGAEに食指を伸ばしていたら、対応言語にJavaとPythonの他にGo言語があったじゃないですか。

コンピュータ言語って今色々出てて、いったい何がトレンドなんだかさっぱりわからないですけど、コレを機に調べちゃってもいいんじゃない?Go言語!
 
、と思って色々google先生に聞いてみたところ、最初に目についたのはコレ

http://blog.daisukeyamashita.com/post/1173.html

彼らがシステムプログラミング言語と言っているように、あまり普通の開発者が利用するような言語ではなさそうで、GUI系のライブラリはほとんど用意されていません。その一方で、通信(ウェブ)周りで必要そうなライブラリは一式揃っています

んー、あまり一般人が使えることを想定してないの??いきなり使うハードルが上がったな。
でもとりあえず文法をみてみるか。

ウリはコンパイルの速さと並列処理

http://www.atmarkit.co.jp/fcoding/articles/go/01/go01a.html

↑から。

Go言語の一番のウリはコンパイル言語だがそのコンパイルが早いということ、並列処理がやりやすいことらしい。
うわあ、確かにコンパイルが早くても俺全然うれしくない!困った!!
でも、並列処理がやりやすいって、なんだか次世代ぽくていいな。自慢の並列処理の文法を早く見てみたい。

代入がコレ!?

変数宣言がこんな感じ。
var a uint64 = 1; (1)
a := uint64(1);  (2)

おお、:=だよ!なつかしいな、昔Delphi触ってた時に見た!世の中関数型とか言って代入をそんなに頻繁に使わなくなると、代入より比較のほうが少ないタイプ量で書きたくなったりするもんなのかな。

普通スレッドを立てる部分が命令Goだけで可能


じゃあGoのウリの並列処理を見てみよう。

http://www.atmarkit.co.jp/fcoding/articles/go/03/go03b.html

package main

// チャネルを返す関数gochの定義
func goch () chan int {
ch := make(chan int);
// goroutineの呼び出し
go func (){ //無名関数を定義し、goroutineに渡す
for i := 0; ; i++ { //無限ループ1
ch <- i;
}
}();
//ch経由で値を受け取るたびに、gochはchを返す
return ch;
}

func main() {
stream := goch();
for { //無限ループ2
println(<-stream); // 戻ってきた値を表示する
};
}
赤い部分go で記述されたところが、普通の言語だとスレッド起動する部分。だいぶ書きやすくなったな!
この手の無限ループして何かの入力に合わせて反応を返すっていう処理、Webサーバではよく使うじゃないですか。
こういうのが手軽に書けるってのがGo言語の特徴なんだろうな。

うん、まだちょっと有用な使い道わからんわ。とりあえず今日は調べただけみたいな。
ラベル:Go
posted by LoyalTouch at 07:40| Comment(0) | TrackBack(0) | Webプログラミング | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック