プログラミング言語

Go ごー

Golang静的型付けコンパイル言語並行処理goroutineGoogle
Goについて教えて

簡単に言うとこんな感じ!

GoはGoogleが作ったプログラミング言語だよ!「速くて・シンプルで・大量のリクエストをさばくのが得意」な言語なんだ。クラウドサービスやAPIサーバーの裏側でよく使われてて、DockerKubernetesもGoで作られてるよ!


Goとは

Go(別名:Golang)は、Googleが2009年に公開したオープンソースのプログラミング言語です。C言語のような高速な実行性能を持ちながら、Pythonのようなシンプルな文法を実現することを目標に設計されました。コードを機械語に変換するコンパイル言語であるため、実行ファイルはそのまま動かせる「1ファイル完結」型で、サーバーへのデプロイが簡単なのも大きな特徴です。

Goが特に強みを発揮するのが並行処理(同時に複数の処理を走らせること)です。goroutine(ゴルーチン) という軽量スレッド機能を言語レベルでサポートしており、何万もの並行処理をメモリ効率よく動かすことができます。そのため、マイクロサービスAPIサーバークラウドインフラツールなど、大量のリクエストを高速に処理する用途で広く採用されています。


Goの主な特徴

特徴内容
静的型付け変数の型をコンパイル時にチェック。バグを早期発見できる
高速コンパイル大規模プロジェクトでも数秒でビルド完了
シングルバイナリコンパイル結果が1つの実行ファイルになる。デプロイが楽
goroutine超軽量な並行処理単位。スレッドより少ないメモリで動く
GC(ガベージコレクションメモリ管理を自動化。C/C++のような手動管理不要
シンプルな文法キーワード数が25個と少なく、学習コストが低い

覚え方:「速・シン・並」

Goの3大特徴は 「速い(Speed)・シンプル(Simple)・並行処理(goroutine)」 の頭文字で「速シン並(そくしんなみ)」と覚えよう!

goroutineのイメージ

通常のスレッド(重い)
  [スレッド1: 約1MB] [スレッド2: 約1MB] ...数百が限界

goroutine(軽い)
  [goroutine: 約2KB] [goroutine: 約2KB] [goroutine: 約2KB]
  ...数万〜数十万を同時に起動できる!

歴史と背景

  • 2007年 — Google社内でRobert Griesemer・Rob Pike・Ken Thompsonの3名が設計開始。巨大なC++コードのビルド遅延と複雑さへの不満が開発動機
  • 2009年11月 — オープンソースとして公開。初期リリース(Go 1.0以前)
  • 2012年3月Go 1.0リリース。後方互換性の保証(Go 1 compatibility promise)を宣言
  • 2013〜2015年Docker(2013年)・Kubernetes(2014年)がGoで実装され、クラウドインフラ界での地位を確立
  • 2021年3月Go 1.16でモジュール管理がデフォルト化。依存関係管理が大幅改善
  • 2022年3月Go 1.18ジェネリクス(型パラメータ)が導入。長年の要望がついに実現
  • 現在 — Stack Overflow Developer Survey 2023で「最も愛されている言語」上位に継続ランクイン

他のプログラミング言語との比較

Goと他言語の比較マップ ← シンプルな文法 複雑な文法 → ← 低速 高速 → Go 速い+シンプル C/C++ 速い+複雑 Python 遅い+シンプル Java 速い+複雑 Rust 最速+難解

比較軸GoPythonJavaRust
実行速度◎ 速い△ 遅い○ 速い◎ 最速
学習コスト○ 低い◎ 最低△ 高い× 非常に高い
並行処理◎ goroutine△ 難しい○ Thread○ async
デプロイ◎ 1バイナリ△ 環境依存△ JVM必要◎ 1バイナリ
主な用途APIサーバー・CLIAI・スクリプトエンタープライズOS・組込み

関連する規格・RFC

※ Goはオープンソース言語であり、IETFやISOの規格ではなくGoogle主導の仕様で定義されています。関連する標準規格はありませんが、GoのHTTPライブラリはRFC準拠で実装されています。

参照仕様内容
Go Language SpecificationGo言語の公式仕様書(Google管理)
RFC 7230GoのHTTPパッケージが準拠するHTTP/1.1仕様

関連用語

  • Docker — Goで実装されたコンテナ実行環境
  • Kubernetes — Goで実装されたコンテナオーケストレーションツール
  • マイクロサービス — Goが得意とするサービス分割アーキテクチャ
  • API — GoがWebサーバー・REST APIの実装でよく使われる基本概念
  • 並行処理 — goroutineが解決する「同時に複数処理をこなす」仕組み
  • コンパイル — Goのソースコードを実行ファイルに変換するプロセス
  • 静的型付け — Goが採用するコンパイル時の型チェック方式
  • クラウドネイティブ — GoがデファクトスタンダードとなっているIT構成思想