Go言語(Golang)で何ができる?Goでできること・使うメリット
以下の記事で、プログラミング言語の年収順ランキングを紹介しました。そこでランキング1位になったプログラミング言語は、Go言語(Golang)でした。
1位はGo言語(golang)|プログラミング言語 年収ランキング
プログラミング言語は古いものから新しいものまで特徴も様々ですが、初心者はどの言語を勉強すればいいでしょう。
最新(2018年)言語別年収ランキングによると、Go言語(golang)とScala言語の求人が平均年収600万円と最も高いという結果になりました。
ランキングの結果と業界歴12年の私の経験を鑑みてオススメの言語について解説します。
Go言語(golang)のエンジニアの年収が1番高いのはなぜでしょうか?
本記事ではGo言語(Golang)について解説します。
本記事の内容
Go言語(Golang)は設計思想が新しい言語です
プログラミング言語にはそれぞれ設計思想があり、プログラミング言語が作られた時代のテクノロジーを反映します。
まず言語の歴史からGo言語(golang)の意義を知る
ざっくりとプログラミング言語の発展の歴史を紐解きます。
以下の一覧は、代表的な4つの言語と、各言語が作られたときの設計思想に取り込まれているテクノロジーを示したものです。
言語 | リリース | オープンシステム | インターネット | クラウド WEB API |
|
1 | COBOL | 1959年〜 | × | × | × |
2 | C | 1972年〜 | ○ | × | × |
3 | Java | 1995年〜 | ○ | ○ | × |
4 | Go言語(golang) |
2009年〜 | ○ | ○ | ○ |
現在、開発の現場で最もよく使われている言語はJavaですが、スタートアップ企業などゼロベースで開発に着手できる企業や個人が使う場合、最も効率的にクラウドなどのテクノロジーを活用できるのはGo言語(golang)です。
Go言語(golang)の特徴
Go言語(golang)には以下の特徴があります。順に解説していきます。
- Googleが作った言語です
- 3つの設計コンセプト
簡単
効率的
信頼性が高い - Googleサービスと親和性が高い
- 実行速度が速い
- 並列処理が容易
- OSに依存しない
Googleが作ったプログラミング言語です
Go言語(Golang)はGooleが作った言語で、Google社内でも標準的に使われています。
[Go言語(golang)の公式WEBサイト(google翻訳あり)]
Go言語(golang)のコンセプトは以下の3つです(公式WEBサイトより)。
- 簡単
- 効率的
- 信頼性が高い
順に解説します。
Go言語(golang)は「簡単」で「効率的」
以下は、Go言語(golang)で簡単なHTTPサーバを作るプログラムコードです。
Go言語(golang)ではベーシクなHTTP通信をするのに複雑なコーディングをしなくても済むことがわかる良い例です。
package main import ("net/http") func main() { // メイン処理 http.HandleFunc("/", HelloHandler) // ハンドラを登録 http.ListenAndServe(":8888", nil) // サーバーを起動 } // HelloHandler サーバーの処理内容を記述 func HelloHandler(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello, World!")) }
Go言語(golang)は「信頼性」が高い
Go言語(golang)がプログラムの信頼性を担保する1つの例として、例外処理が挙げられます。
Javaなどでは頻繁に大小様々な例外処理が行われ、時には例外が処理されずに捨ておかれるコーディングが許容されます。
一方でGo言語(golang)における例外とは異常な状態であり、呼び出し元が責任をもって正しい状態に戻すよう処理しなくてはなりません。
また、バグなどでどうしようもなくなったときにマシンを守るための機構として、panicがあります。
詳しくは割愛しますが、このようにGo言語(golang)はプログラムコードの挙動の信頼性を重視した設計になっているため、他言語で開発するよりも安全なアプリケーションを作成することができます。
GoogleのクラウドやWEBサービスとの親和性が高い
Google mapsなどのWEBサービスやGoogle Cloud Platformのようなクラウドサービスでは、GOを推奨言語としており、親和性が高いです。
Googleの開発した言語ですので当然ですね。
実はAWSでもGCPと同じコードで動かせる
Go言語(golang)にはAWS(Amazon)など他のクラウドでも同じコーディングで動かせるよう、クラウド間のAPI仕様の違いを吸収するテクノロジー(Go Cloud)も標準で提供されています。
Go Cloudを使えば、複数のクラウドを使って同じアプリケーションを動かすことができます。
実行速度が速い
Go言語(golang)で作成されたアプリケーションは、C言語やC#・RustのようなC言語を代替しうる高速な言語と遜色ない速度で稼働し、Pythonなどの一般的な高水準言語より圧倒的に速いのが特徴です。
並列処理が容易
並列処理を行えば、10秒かかる処理を2つ並列に処理して5秒で終わらせることができます。
他言語でも並列処理は行えますが、Go言語(golang)では比較的簡単に並列処理を扱えるよう設計されています。
Go言語で並列処理するための機能は主に3つあります。
- goroutine
- チャネル
- select
並行処理のための機能① goroutine
go 《関数名》
と書くだけで、関数を並行稼働することができます。bashで&を付けてバックグランド実行するようなお手軽さですね。
並行処理のための機能②チャネル
処理を並行稼働させたときに問題になるのが、それぞれの進捗管理。
例えばとある計算を並行で処理するとき、全ての並行での計算が終わってから結果を集計したいとき、計算結果と進捗管理にはチャネルが便利です。
チャネルはキューの一種で、並列処理した結果データを、処理が早く終わった順に直列に格納することができます。
必要なデータが揃ったら後続の集計処理を行うなど、並列実行した際のデータに注目して制御することができる仕組みです。
並行処理のための機能③ select
selectを使えば、並列処理中の複数のチャネルの受信を待って適切な処理を選択する(select)ことができます。
どこかのチャネルにデータが入ったら、そのチャネルに対して固有の処理を実行することが可能です。
select { case msg1 := <-channel1: fmt.Println("並列処理中のチャネル1から受け取りました", msg1) case msg2 := <-channel2: fmt.Println("並列処理中のチャネル2から受け取りました", msg2) }
OSに依存しない
Go言語(golang)はコンパイルが非常に速いのも特徴的ですが、さらにプログラムコードがOSに依存しない点が大きな特徴です。
例えばMacで開発しコンパイルしたときにWindowsとLinuxのバイナリも一緒に生成することが可能です。
また、32ビットマシンで64ビット用のバイナリを生成することもできます。
何ができる?Go言語(golang)で作れるアプリは
実際の求人情報から、Go言語(golang)でどのような開発が行われているか調査しました。
具体的には、例えば以下のサーバ機能の開発求人が出ていました。
動画配信
決済システム
ソーシャルゲーム
ほか多数。ただし、以下の理由から個別にGoの使われ方をみていく必要はあまりないかと思います。
Googleのクラウドサービスを使ってアプリを作るなら、Go言語(golang)が最適
Googleのクラウドサービスを使えば、どのようなアプリ・サービスでも作れる
※Goを使っている代表的企業は後述します。
結論
- Go言語(golang)でアプリはなんでも作れます。
- 設計思想も、現代の汎用プログラミング言語として作られてます。
- さらに、Googleのような大規模で高負荷なサービスを実装可能な設計です。
エンジニアがGo言語(golang)を使うことのメリット
メリット1:レガシーな仕事から脱却できる
世の中の開発現場は、次の2パターンのどちらかです。
レガシーな開発現場
仕事が多いが、エンジニアも多い世界
保守的な仕事
古いプログラミング言語を使う
ゼロベースで開発する現場
仕事が希少でエンジニアも希少な世界
クリエイティブな仕事
最新のプログラミング言語が使える
どちらが優っているとか言うつもりはありませんが、ゼロベースで開発する現場で働きたいなら、Go言語(golang)を習得するのが近道です。
メリット2:求人が魅力的
以下はGo言語(golang)を使っている代表的企業です。こんな企業で働きたいなら、Go言語(golang)を習得すると良いでしょう
- メルカリ
- Freee
- クックパッド
- Gunosy
- DeNA
- サイバーエージェント
- 任天堂
- ドワンゴ
Go言語(golang)のエンジニアの年収が高い理由
エンジニアが不足しているから
年収が高い一番の理由は、エンジニア不足です。先ほどの開発現場の話に戻ります。
レガシーな開発現場
仕事が多いが、エンジニアも多い世界
保守的な仕事
古いプログラミング言語を使う
ゼロベースで開発する現場
仕事が希少でエンジニアも希少な世界
クリエイティブな仕事
最新のプログラミング言語が使える
エンジニアの多いレガシーな現場でさえ、求人倍率が8倍近い状態で、エンジニアの人材市場は慢性的な人材不足の状態になっています。
C言語やJavaであれば海外に委託することもできますが、Go言語(golang)をマスターしている人材はもっと不足しています。大手WEB系企業中心に、自社内で積極的にGoエンジニアを育てているのが現状です。
またGo言語は効率的に開発ができ、将来も有望な言語ですから、Go言語を社内に根付かせたい企業から見ると、先行投資としてGo言語を既に習得しているエンジニアに多くの給料を払うインセンティブが働きます。
【注意】Go言語のエンジニア=高収入、ではない
新しいプログラミング言語で高効率に開発ができるからJavaやC/C++のエンジニアよりも高い年収が得られるかというと、そうでもありません。
道具が良いのと、腕が良いのとは別だからです。また、作るアプリケーションがどれだけ価値のある、稼げるアプリかも重要です。仕事を選ぶ際に注意したいポイントですね。
COBOLエンジニアがJAVAのSEより市場価値が高い理由
COBOLってどんなプログラミング言語ですか?古いプログラミング言語みたいだから、とても将来性はないんでしょう?なんでまだ使われているのか、不思議です。衰退していくCOBOLのエンジニアはこれからどうするんだろう → こんな疑問に答えます。
COBOLってどんな言語?
COBOLエンジニアの年収
COBOLエンジニアの市場価値が高い理由
COBOLが消えるときはJAVAも消える
Amazon AWSでCOBOL資産を動かす
まとめ
Go言語(Golang)についてのまとめです。
- Go言語はGoogleが作った言語で、Google社内でも標準的に使われている。
- Go言語は設計思想が新しく、API開発やクラウド利用を前提としている。
- スタートアップや大手WEB系企業などの新規プロジェクトで人気の言語。
- Go言語を扱えるエンジニアの希少性は高く、他言語より年収も高い傾向。
今回は以上です。Go言語(golang)について解説しました。参考になりましたら幸いです。