Go言語ことはじめ
個人開発アプリのバックエンドに採用したいので、Go言語の勉強を始めます。
Go(Golang)とは
Googleが開発したプログラミング言語。2009年11月にオープンソースで公開された。リリースノートによると2023年10月17日時点の最新verは1.21.3。
Docker, KubernetesもGoで作られてるらしい。初耳でした。国内でも、規模を問わず様々な有名企業が利用。
ちなみにGopherくんというマスコットキャラクターがもいるようです!(英語では「熱心で精力的な人」というスラングでもあるらしい)
特徴
Gopher道場の最初のビデオからそのまま引用させていただきます。
- 強力でシンプルな言語設計と文法
- 並行プログラミング
- 豊富な標準ライブラリ群
- 周辺ツールの充実
- シングルバイナリ・クロスコンパイル
開発・ビルド速度の低下に対抗しつつ、静的解析も容易にしてコンパイルでエラーの発見ができるようにすること、複雑なメモリ管理なしに並行プログラミングを可能にすることが主な目的のようです。
また、Go1の間は後方互換が保証されているとのこと。いずれ破壊的変更が生じることになれば、Go2としてリリースされるのでしょう。
これらの思想に基づいてGoが開発されていることを念頭にコーディングすると良さそう。
ゴールーチン
コルーチンのGoとしてのもじりっぽい。ブログがあったのでサッと読んだ。Visitorパターン(デザインパターン)が出てきたので、Goがなんとなく読めるようになったらまたじっくり読みたい。
複数のゴールーチン間のデータはチャネルを介して比較的簡単にやり取りできるらしい。
標準ライブラリ・周辺ツールの充実
公式ドキュメントにある記載のある標準ライブラリはこちら。周辺ツールとしてGo toolsも提供されているとのこと。
シングルバイナリ・クロスコンパイル
ビルド後に生成されるファイルが単一なのでリリース作業も簡単そう。またGOOS(グース), GOARCH(ゴーチ)という環境変数を利用して、開発環境以外のOS、アーキテクチャ向けにコンパイルできるらしい。これは便利そう!
gRPC
Googleが開発したRPC(Remote Procedure Call)プロトコル。そもそものRPCも扱ったことがないので、こちらもGo自体の基礎文法を理解したらH.Sakiさんの本で学ばせていただこう。
組み込み・IoT利用
組み込み開発にも利用できるが、ランタイムを含むのでバイナリサイズが大きくなる懸念はあるらしい。TinyGoというサブセットである程度バイナリを軽量化できる?
TinyGoはLLVMやWASM(ワズムと読む)もサポートしている。
ロボティクス、IoT向けのフレームワーク「GOBOT」の提供もあった。
フロントエンド開発?モバイルアプリ開発?
現時点でGo1.18.0までの対応ではあるのですが、GopherJSというGolang→JavaScript変換のプロジェクトが動いていました。Go Mobileというモバイル向けの実験的プロジェクトなどもあるとか。Gopherの熱量が凄い…!
勉強方法
Gopher道場「1-3 Goを学ぶには」で詳しく解説されていました。
1. Goに触れる - 1.3. Goを学ぶには - Gopher道場 -
ざっくり概要がわかったので、次回からは公式ドキュメントを中心に学んでいきます!
ただ、anyenv経由で仮想環境を使いたいのでインストールは公式ではなく、goenvを用いることにします。
anyenvのgoenvにGoLangをインストール - Qiita
参考
All releases - The Go Programming Language
Discussion