~/VibeHandbook
$39

言語

go.dev

Go

概要

Go(Golang)は、シンプルさ、高速なビルド、並行処理を目的に設計された、Google による静的型付けのコンパイル言語です。単一の静的バイナリを生成し、小さく意図的な機能セットを持ち、信頼性の高いネットワークサービスやコマンドラインツールを書くために作られています。

強み

  • 依存関係のない単一バイナリにコンパイルされる ── デプロイが非常に簡単。
  • goroutine とチャネルによる組み込みの並行処理。
  • 高速なコンパイルと高速なランタイム、そしてガベージコレクション。
  • 強力な標準ライブラリ(HTTP、JSON、暗号)と強制されるフォーマット(gofmt)。

トレードオフ

  • 意図的にミニマル:冗長なエラーハンドリング(if err != nil)と限られた表現力。
  • ジェネリクスの導入が遅く、他言語に比べると今なお控えめ。
  • 本格的なデータサイエンスや UI 開発にはあまり向かない。
  • 可読性を高めるそのシンプルさは、大規模なコードベースでは反復的に感じられることがある。

使いどころ

高速で自己完結したバックエンドサービス、CLI ツール、あるいはネットワークインフラ(プロキシ、API、デーモン)が必要なときに Go を選びましょう。デプロイのシンプルさ、予測可能なパフォーマンス、並行処理が重要な場面で輝きます ── 多くのクラウドネイティブツール(Docker、Kubernetes)が Go で書かれているのはそのためです。

バイブコーディングとの相性

AI アシスタントは Go をうまく扱えます。それはまさに言語が小さくイディオムが強いからです ── 通常、物事を行う明白な方法が一つあるため、生成されるコードは慣習的で gofmt でクリーンなものになりがちです。エラーを無視せず明示的に処理すること、依存関係に頼る前に標準ライブラリを使うこと、並行処理には適切な context のキャンセルとともに goroutine を活用することを AI に指示しましょう。go.mod のモジュールパスと実行可能な main を含めるよう依頼すれば、すぐに go run して各部分を検証できます。

package main

import (
	"fmt"
	"strings"
)

func main() {
	words := strings.Fields("go is fast and simple")
	counts := map[string]int{}
	for _, w := range words {
		counts[w]++
	}
	fmt.Println(counts)
}