1, なぜGoはインスタンスを立ち上げる系の奴と相性がいいのでしょうか?
Go のバイナリは大よそシングルバイナリです。ruby や node.js 等でもそのプロジェクト専用の実行環境(XXXenv)を作る事は出来ますが、基本ライブラリには依存します。例えば yaml や openssl 等。Go はそれすら依存していません。
またコンパイルが速いのでインスタンス起動時に行う以下の手順も速くなります。
- コンパイラのインストール
- プロジェクトのリポジトリ clone
- ビルド(ここが遅い)
ruby でシステム ruby に依存せずにこれをやろうと思うと、まず ruby を rbenv 等でビルドしないといけません。さらにシステムを更新した事で yaml や openssl が壊れないとも限りません。
Go の強みは他への依存が少ない事、コンパイルが速い事が上げられます。
言語の特徴としてコンパイル型言語という点も挙げられますが、このお題としては外した方が良いと思いましたので敢えて書きません。
2, 他にバックエンド側でGoを採用するメリットはなんなのか?
上記で述べた通りですが、シングルバイナリですので同じ OS 間であればバイナリ1つをポンとコピーすれば動きます。片方のサーバを OS アップデートしたら動かなくなった、といった事も起きにくいのです。
また Go はマルチコアを生かしやすい言語です。クラウドなどでコア数を上げたら、それ相応の動作をしてくれます。ここもインスタンスを立ち上げる系のシステムで採用される理由です。なぜマルチコアが生かしやすいかは、goroutine というキーワードで検索して貰えると分かります。
3, Nodeと比べてどれくらいパフォーマンスに違いが出るのか?
node.js はシングルスレッドな処理系です。そのまま使っているだけではマルチコアを生かしづらいのです。cluster という仕組みもありますが、普段とは異なる書き方をしないといけません。Go の場合は goroutine という、関数に go
を付けただけの記述で簡単にマルチスレッドアプリケーションを書く事が出来ます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/26 02:20
2017/12/26 04:21
2017/12/26 06:38
2017/12/27 00:42