Go は『クラウド時代のシンプルな言語』
Go(Golang)は、Google が開発した、シンプルさ・並行処理・高速なコンパイルを特徴とする言語です。Docker・Kubernetes・各種クラウドツールが Go で書かれており、クラウドネイティブ時代の中核言語になっています。本記事では、Go を未経験から習得するロードマップを編集部の視点で整理します。学習進度は個人により異なります。未経験からバックエンドエンジニア もご参考に。
Go の特徴
(1) シンプルな文法:学習コストが低い。(2) 高速なコンパイル:開発サイクルが速い。(3) 並行処理:goroutine・channel が言語標準。(4) 単一バイナリ:デプロイが容易。(5) 強い静的型付け:安全性が高い。Docker・K8s学習 もご参考に(多くが Go 製)。
学習ロードマップ(2〜4ヶ月)
(1) 第1段階:基本文法:変数・関数・制御構文。(2) 第2段階:型システム:struct・interface・slice・map。(3) 第3段階:エラーハンドリング:Go 独自の error の扱い。(4) 第4段階:並行処理:goroutine・channel・sync。(5) 第5段階:標準ライブラリ:net/http・encoding/json。(6) 第6段階:実プロジェクト:API サーバー・CLI ツール。データベース基礎 もご参考に。
Go 独特の概念
(1) 明示的なエラー処理:例外でなく戻り値。(2) interface の暗黙的実装:ダックタイピング。(3) goroutine:軽量スレッド。(4) channel:goroutine 間の通信。(5) defer:後処理の予約。他言語経験者は「例外がない」「継承がない」点に最初戸惑いますが、シンプルさの源です。
並行処理の基礎
(1) goroutine の起動:go キーワード。(2) channel での通信:データの受け渡し。(3) select:複数 channel の待ち受け。(4) sync パッケージ:WaitGroup・Mutex。(5) context:キャンセル・タイムアウト。「メモリを共有して通信するな、通信してメモリを共有せよ」が Go の哲学です。SREへの転身ガイド もご参考に。
活用分野
(1) API サーバー:高速・低リソース。(2) CLI ツール:単一バイナリ配布。(3) クラウドインフラ:K8s・Terraform 等。(4) マイクロサービス:軽量サービス。(5) ネットワークプログラミング:プロキシ・gRPC。マイクロサービス設計 もご参考に。
エコシステム
(1) Web フレームワーク:Gin・Echo・標準 net/http。(2) ORM:GORM・sqlc。(3) テスト:標準 testing パッケージ。(4) ツール:gofmt・go vet・golangci-lint。(5) モジュール管理:go modules。標準ツールが充実しており、追加設定が少なくて済むのが Go の魅力です。
失敗しがちなパターン
(1) 他言語の書き方を持ち込む:Go らしさを学ばない。(2) エラー処理を雑に:error を握りつぶす。(3) goroutine リーク:終了しない goroutine。(4) 過度な抽象化:Go はシンプルさを好む。(5) channel の誤用:デッドロック。対策は、(1)Go の流儀を学ぶ、(2)error を丁寧に、(3)context でキャンセル、(4)シンプルに、(5)channel の理解、です。IT・Web業界の職種完全マップ もご活用ください。