Go は、シンプルさと運用のしやすさで支持されるプログラミング言語です。 API、マイクロサービス、CLI ツール、インフラまわりの開発でよく名前が出ます。
他言語といちばん違うのは「配布のかたち」
Go はビルドすると依存を含んだ単一の実行ファイルになります。実行側に言語のランタイムを入れる必要がありません。
これが効くのは配布と Docker です。Java なら JVM、Python ならインタプリタと依存パッケージを同梱する必要がありますが、Go はバイナリ1つを置けば動きます。結果としてコンテナイメージが小さくなり、起動も速くなります。サーバーレスや CLI 配布で Go が選ばれる理由の大半はここです。
並行処理が言語に組み込まれている
go 関数() と書くだけで軽量スレッド(goroutine)が起動し、チャネルで値をやり取りします。スレッドを OS に直接作らせるより桁違いに軽く、数千〜数万を同時に動かせます。
ただし起動が簡単すぎることが罠にもなります。呼び出し元が先に終了すると goroutine は結果を返さないまま消えますし、チャネルの受け手がいないまま送ると永久に止まります(デッドロック)。並行処理を書くなら、終了条件と待ち合わせを最初に決めてください。
エラーは例外ではなく戻り値
Go には例外機構がなく、エラーは戻り値として返ります。if err != nil が大量に並ぶのはそのためで、これは書き方が悪いのではなく言語の設計です。
裏を返すと、握りつぶしが目に見えるということでもあります。_ でエラーを捨てている箇所はレビューで必ず見てください。
押さえておきたい注意点
文法が小さいぶん、他言語にある機能はあえて省かれています。「継承がない」「三項演算子がない」のは不足ではなく方針です。他言語の書き方をそのまま持ち込もうとすると、かえって遠回りになります。