T1

Go 言語 公開 ── Google

出典The Go Authors (Wikimedia Commons) · Public domain · Commons で見る ↗

メタデータ

日付
年代
2000s
Tier
T1
出典数
10
関連項目
03

Go は、Google で Robert Griesemer・Rob Pike・Ken Thompson が作った、コンパイル型・静的型付けのプログラミング言語である。プロジェクト公式の FAQ は始まりを 2007年9月21日 としている。3人がホワイトボードに新しい言語の目標を書き出し始めた日である。一般公開は 2009年11月10日で、同日、Google のオープンソース・ブログで発表された。最初の安定版 Go 1 は、プログラムが何年にもわたってそのままコンパイルできるという約束とともに2012年3月28日に出た。最初の Web サイトのアドレスにちなんで「golang」と呼ばれることも多いが、FAQ は言語の名前はあくまで Go だと明言している。

時期出来事
2007年9月21日Griesemer・Pike・Thompson がホワイトボードに目標を書き出す
2008年1月Thompson が C のコードを出力するコンパイラに着手
2008年5月Ian Taylor が草案仕様から独自に GCC フロントエンドを書き始める
2008年末Russ Cox が加わり、言語とライブラリを試作から実用へ進める
2009年11月10日オープンソースとして一般公開
2012年3月28日Go 1 と互換性の約束
2015年8月19日Go 1.5。コンパイラとランタイムがすべて Go で書かれ、GC が並行化
2018年8月24日Go 1.11。依存関係管理のモジュール
2022年3月15日Go 1.18。ジェネリクス

2007〜09年 ── なぜ新しい言語なのか

FAQ は動機を率直に書いている。Go は、Google での仕事に使っていた既存の言語と環境への不満から生まれた。効率のよいコンパイル、効率のよい実行、書きやすさの3つは、主流のどの言語でも同時には手に入らず、多くのプログラマは書きやすさを取って、安全性と効率を捨てて C++ や Java から Python・JavaScript のような動的型付け言語へ移りつつあった。Go が目指したのは、インタプリタ型・動的型付け言語の書きやすさと、コンパイル型・静的型付け言語の効率と安全性を両立させること、ネットワークとマルチコアの時代のハードウェアに合わせること、そして大きな実行ファイルでも1台の計算機で長くて数秒でビルドできることだった。

最も切実だったのはビルド時間である。Pike は2012年の講演「Go at Google」で、Google のビルド技術者が2007年に主要な C++ バイナリを計測した結果を紹介している。合計4.2メガバイトのおよそ2,000ファイルが、#include を展開し終えるとコンパイラへの入力として8ギガバイトを超えた。ソース1バイトあたり約2,000バイトの膨張である。Pike は、そうしたプログラムに必要だった45分のビルドの最中に Go が構想された、という話を Go の「起源神話」として紹介している。一方で、Go が何でないかもはっきりさせている。Go の目的はプログラミング言語設計の研究ではなく、設計者とその同僚の仕事の環境をよくすることであり、言語研究よりソフトウェア工学のための言語だ、と。

設計者のうち2人は Bell 研究所の出身だった。Thompson は最初の UNIX と、C 言語 につながる B 言語を書いた人物で、Pike はそこで彼と一緒に働いていた。

2009年11月10日 ── 公開

Google Open Source Blog の発表は、Griesemer・Pike・Thompson・Ian Taylor・Russ Cox・Jini Kim・Adam Langley の連名で、Go をマルチプロセッシングを支援し、オブジェクト指向設計を新しく軽やかに捉え直した、システムプログラミングに向いた言語として紹介した。典型的なビルドは一瞬に感じられ、大きなバイナリでも数秒でコンパイルできること、コンパイルされたコードは C に近い速度で動くことも約束している。

Go を特徴づける機能は最初からそろっていた。

機能役割
goroutine何千個でも起動できる軽量な並行実行の関数
チャネルgoroutine 同士が通信し同期するための型付きの管
インタフェース暗黙に満たされる。階層ではなく合成による型システム
ガベージコレクションシステム言語での自動メモリ管理
明示的な依存関係import の厳格な規則により、ビルドを速く保つ

2012年 ── Go 1 と「壊さない」約束

2012年3月28日の Go 1 は、実験をプラットフォームに変えた。その告知は、以後の言語のあり方を決めた保証を示している。Go 1 で書かれたプログラムは、さまざまな環境で、年単位の時間にわたって、変更なしにコンパイルされ動き続けると確信してよい、というものである。この約束があるために、その後の変更はゆっくりと慎重に入ってきた。

言語の成熟を示すリリースが2つある。2015年8月の Go 1.5 は、ツールチェーンから C を完全に取り除いた。リリースノートによれば、コンパイラとランタイムはわずかなアセンブラを除いてすべて Go で書かれるようになった。同時にガベージコレクタは並行化され、全体を止める時間はほとんどの場合10ミリ秒未満になるとされた。2022年3月の Go 1.18 は、最も多く要望されてきた機能を加えた。そのリリース告知は、ジェネリクスへの対応を Go で最も要望の多かった機能だと書いている。

Go とクラウド

Go が最も強い足場を築いたのは、クラウドの基盤ソフトウェアだった。Go プロジェクト自身のクラウド・ネットワークサービス向けのページは、Kubernetes を Go で書かれたオープンソースのコンテナ・オーケストレーション・システムと説明し、Docker を Go で作られたプラットフォームの一つに挙げ、Cloud Native Computing Foundation のプロジェクトの75%以上が Go で書かれているとしている。影響は Go の利用者の外にも及んだ。2025年3月、Microsoft は TypeScript のコンパイラの次の大型版を Go に移植していると発表した。FAQ はまた、Go を、Rust・Elixir・Swift などとともにプログラミング言語の設計を再び活発な分野にした新しい言語群の、最初期の一つに位置づけている。

ほかの言語との位置関係は プログラミング言語の年表 に、基盤ソフトウェアでの役割は クラウドの年表 にある。プロジェクトが始まったのは Google である。

よくある質問

Go 言語はいつ、誰が作ったのですか。
Google の Robert Griesemer・Rob Pike・Ken Thompson です。公式 FAQ によれば3人は2007年9月21日にホワイトボードで目標を書き出し始め、Go は2009年11月10日にオープンソースとして公開されました。安定版 Go 1 は2012年3月28日です。
なぜ Google は新しい言語を作ったのですか。
FAQ によれば、既存の言語では効率のよいコンパイル・効率のよい実行・書きやすさを同時に得られなかったためです。Pike は2007年に計測された C++ バイナリで、4.2MB のソースが #include の展開後に8GB を超えるコンパイラ入力になった例を挙げています。
Go と golang はどちらが正しい名前ですか。
Go です。golang という呼び名は、最初の Web サイトが golang.org だったことから広まりました。
Go にジェネリクスが入ったのはいつですか。
2022年3月15日の Go 1.18 です。リリース告知は、ジェネリクスへの対応を Go で最も要望の多かった機能だと書いています。

出典

  1. 一次資料Hey! Ho! Let's Go! — Google Open Source Blog, November 10, 2009

    2009年11月10日の公開告知、連名者、システムプログラミング向けという紹介、ビルド速度

    取得日: 2026-10-05

  2. 一次資料Frequently Asked Questions (FAQ) — The Go Programming Language

    2007年9月21日の始まり、2008年の経緯、動機、golang という呼び名

    取得日: 2026-10-05

  3. 一次資料Pike, R. (2012). Go at Google: Language Design in the Service of Software Engineering

    2007年の C++ ビルドの計測(4.2MB から8GB 超)、45分ビルドの起源神話、研究言語ではないという位置づけ

    取得日: 2026-10-05

  4. 一次資料Go version 1 is released — The Go Blog, 28 March 2012

    取得日: 2026-10-05

  5. 一次資料Go 1.5 Release Notes

    取得日: 2026-10-05

  6. 一次資料Go 1.18 is released! — The Go Blog, 15 March 2022

    取得日: 2026-10-05

  7. 一次資料Release History — The Go Programming Language

    取得日: 2026-10-05

  8. 一次資料Go for Cloud & Network Services — go.dev

    Kubernetes は Go 製、CNCF プロジェクトの75%以上が Go という Go プロジェクト自身の記述

    取得日: 2026-10-05

  9. 一次資料Hejlsberg, A. A 10x Faster TypeScript — TypeScript Blog, March 11, 2025

    取得日: 2026-10-05

  10. 三次資料Go (programming language) — Wikipedia

    取得日: 2026-08-08

最終更新:

共有