Go言語を簡単に調べてみた印象

なぜに今Go言語?

Node.jsからGo言語に切り替えたという記事を最近よく見かける気がします。Go言語ってGoogleが作った言語っていうくらいしか前提知識なかったのであまりピンと来てなかったんですが、下記のid:yosuke_furukawaさんの記事で最近ようやく興味を持ち始めました。

記事はNode.js界隈で貢献の大きかったvisionmediaがNodeを捨てて、Goに切り替えて開発を行うと宣言したという内容です。ぼくはNode.jsも最近触り始めた程度なので記事に書かれているようなNode.jsならではの苦労についてはまだあまりピンと来てないところもあるのですが、確かにJavaScriptのエラーハンドリングはコールバック多用しがちでしんどいな…という印象はありますね。また最近面白法人カヤックさんもGo言語を推進するという記事を書かれてます。注目度高いですし1〜2年たったら使える開発者かなり増えてそうな気もします。

Go言語の概要

Go言語、よくGolangって言われたりしますが、言語の概要を搔い摘むのに下記の動画がとても分かりやすかったです。10分くらいの動画です。


Golangとは - YouTube

うん、コンパイルが高速なのと並列処理に優れているというのは分かりました。まずコンパイルがあるの良いですね。元々Javaを書いてた時期のほうが長いのでぼくにとってもこれは嬉しいです。他のGo言語触ってみた系の記事でもコンパイラ高評価な気がします。

言語仕様的には下記のQiitaの記事が全体感把握するのに役立ちそう。言語仕様については褒めてる人多いですかね。あまりディスってる記事は見かけませんでした。特に並列処理が簡単にできるgoroutineとchannelが面白そうかな。

忙しい人のためのA Tour of Go

Go言語は高速

上記の動画でも触れられてますが、調べてるとGo言語かなり速いそうです。id:yusuke_furukawaさんもベンチマークされてますね。性能に関してはコンパイル自体の高速性も含め賛辞ばかりが目につきます。

ただ、個人的に気になるのは接続数のスケール(所謂C10K問題)へどう対応しているのかという点でした。Node.jsでは非同期I/Oで処理するため接続数が増加してもスケールするというところが魅力でしたが、Go言語の場合はそのあたりどうなんでしょうか。

Go言語と非同期処理

もちろんNode使ってる人たちが切り替えてるのでスケールする仕組みになっているんだろうなと思いつつ、ただググってもなぜかあまりヒットしない。「非同期I/O Golang」等とググってみたんですが、あまり分かりやすそうな記事が見つかりませんでした。Node.jsだとこの非同期I/O関連の記事ってかなりヒットするんですが、Go言語は記事自体がまだ少ないかもしれませんね。

そして関係してそうな英語記事を見つけました。下記の記事の「Taking another approach」という章に、Goがイベントループ(goroutine)を利用してリクエストをハンドリングする形で描かれています。

C10K – A NON-BLOCKING WEB SERVER IN GO

go eventloop

これはGoの並列処理に関する書籍の広告用の記事なのかな。なるほど。ノンブロッキングというところではNode.jsと同じコンセプトですよね。英語なんで誤解しているところもありそうですが、Node.jsと同様スケールするというものだという事が記事を斜め読みしつつ理解できました。と言う事で、ちょっと調べてみて分かった気になり、実際にGo言語を勉強してみようというモチベーションが湧いてきました。Go面白そうですね。