バージョンアップ情報
Go言語(Golang)情報
Goとは
Goは2009年にGoogle社からオープンソースとして発表されたプログラミング言語で、一般的にはGo言語やGolangと呼ばれています。
既存の静的型付けプログラミング言語の利点(安全性、実行性能など)と、動的型付けプログラミング言語の利点(開発のしやすさ)を併せ持つ比較的新しいプログラミング言語です。
2009年以前、Google社においてサーバを実装するプログラムは静的型付け言語であるC++、Javaが主流でした。
これらの言語は、効率的なコンパイル、効率的な実行、プログラムの容易さの3つすべてを満たすものではありませんでした。
また、安全性や効率性よりもプログラムの容易さを選ぶプログラマーは、動的型付けのインタプリタ言語(Python、JavaScriptなど)を選んでいました。
このような背景から、双方のプログラミング言語の長所を生かした新しいプログラミング言語が求められるようになり、Goという新しい言語の開発が始まりました。
Goの主な設計方針は、「可能な限り効率的で、安全で、流暢なプログラミング言語にする」ことです。
Goでは、コード上の無駄な記述や複雑性の削減が積極的に行われています。
例えばC言語のような前方宣言やヘッダファイルは必要なく、宣言は1度きりです。
また、単純化のためC++ やJavaのような型階層や例外処理、アサーション、関数・演算子オーバーロードがありません。
新しい言語ですが、既に多くの企業で利用されています。
特に、仮想コンテナのDockerや、コンテナオーケストレーションシステムのKubernetesは Go で実装されており、十分な稼働実績があります。
主な特徴
Goの主な特徴は、シンプルさと実用性を重視し、次の点にあります。
- 並行処理を標準で扱える(goroutineとchannel)
- コンパイル言語としての実行性能と配布のしやすさ
- 実用的で一貫したツールチェーン
具体的には以下の点が挙げられます。
- 組み込みの軽量並行モデルにより、複数の並行処理を低コストに扱えること。
- コンパイル言語でありながらコンパイルが非常に速く、単一の自己完結型バイナリを生成でき、デプロイや配布が容易であること。
- 実用的な標準ライブラリ(特にネットワークやHTTPまわり)が充実しており、インフラ/ネットワーク系の開発生産性が高いこと。
- ランタイムに組み込まれたガベージコレクションと、並行収集による短い停止時間により、メモリ管理と応答性のバランスが取れていること。
- 明確で一貫したツール群(go fmt、 go build、 go test、 go vet、 go mod 等)により、コード品質やビルド・テストの標準化が容易であること。
|
項目 |
Go |
Java |
C/C++ |
Python |
|---|---|---|---|---|
|
型システム |
静的型付け |
静的型付け |
静的型付け |
動的型付け |
|
実行モデル |
ネイティブ実行 |
JVM上で実行 |
ネイティブ実行 |
VM/インタプリタ |
|
並行性 |
軽量並行処理(goroutine+channel) |
スレッド並行処理 |
低レベル並行処理 |
GIL制約付き並行処理 |
|
ビルド/配布 |
単一バイナリ生成として配布可能 |
JAR形式、実行にはJVM/JREが必要 |
ネイティブバイナリとして配布可能 |
スクリプトと依存ライブラリを配布可能 |
|
処理速度 |
高 |
高 |
非常に高 |
低〜中 |
|
学習コスト |
低〜中 |
中 |
高 |
低 |
|
適用領域 |
サーバ、CLI、インフラ、ネットワーク |
エンタープライズ、バックエンド |
OS開発、組込み、高性能処理 |
スクリプト、データ、プロトタイピング、AI開発 |
上記の特徴から、GoはKubernetesやDockerといったインフラ寄りのプロダクトの開発に活用されています。
他にも、Goには以下の特徴があります。
|
フォーマッタ |
|
|---|---|
|
ドキュメントの生成・表示 |
|
|
命名規則 |
|
|
セミコロン |
|
|
制御機構 |
|
|
関数 |
|
|
ゼロ値とメモリ割り当て |
|
|
初期化 |
|
|
メソッド |
|
|
インターフェース |
|
|
ブランク識別子 |
|
|
埋め込み |
|
|
並行処理 |
|
|
エラー制御 |
|
メリット・デメリット
メリット・必要性
1.豊富な利用実績
Docker や Kubernetes などの多くの製品が開発されています。
2.高速な処理性能とコンパイル
高速なコンパイルと出力されたネイティブコード実行により高速で動作できます。
3.並行処理に強い
goroutineにより、多くの並行処理を簡単に効率的に実行できます。
4.シンプルで読みやすい文法
シンプルな言語仕様のため可読性が高く、大人数での開発やメンテナンスが容易です。
5.多くのプラットフォームに対応
Linux、Windows、macOSなどの多くのプラットフォームでのコンパイルと実行が可能です。
6.豊富な標準ライブラリとツール
HTTPサーバやJSON操作などのWeb開発のための便利なライブラリや、フォーマッタ(go fmt)やテストツールが同梱されています。
7.安全性が高い
GC(ガベージコレクション)や型安全性が、メモリリークのリスクを低減します。
デメリット・注意点・課題
1.try/catchがない
try/catch構文はなく、errorインターフェースによる明示的なエラーハンドリングが必要で、コードが冗長になりやすい場合があります。
2.完全なオブジェクト指向言語とは言えない
オブジェクト指向的なプログラミングが可能ですがクラスや継承の概念がなく、構造体の埋め込みとインターフェースで代替する設計のためコードの再利用がやや煩雑になります。
3.型システムの表現力
sum type(直和型)やパターンマッチングが言語仕様として提供されないため、いくつかのデータモデリングが冗長になることがあります。
4.ランタイムのオーバーヘッド
GC(ガベージコレクション)による一時停止が発生するため、極度の低レイテンシが求められるリアルタイムシステムには不向きな場合があります。
5.GUI開発向けの機能は限定的
標準ライブラリにはデスクトップGUIアプリケーション向けの物は含まれていないため、別途FyneやGioなどのGUIフレームワークが必要です。
ユースケース
Goは以下のような用途で使用されています。
- クラウドおよびネットワークサービス
- コマンドラインインタフェース(CLI)
- ウェブ開発
- 開発オペレーション(DevOps)およびサイト信頼性エンジニアリング(SRE)
Goで開発されたプロダクト
Goで開発されたOSSには以下のようなものがあります。
新たな機能・取り組み
Goは2026年5月現在でも積極的に開発されており、以下のような新しい機能が追加されています。
Green Tea GC
Green Tea GC(ガベージコレクション)は、新たに導入されたGCです。
従来のGCではオブジェクト単位でポインタ探索を行っていましたが、Green Tea GCでは、ページ(連続したメモリブロック)毎にスキャンする効率的な方式に変更され10%~40%高速になっています。
Green Tea GCはGo 1.25 で実験的に導入され、Go 1.26ではデフォルトで有効になっています。
ポスト量子暗号(PQC)
Goでは、将来登場することが想定される量子コンピュータによる解読にも耐えられる次世代耐暗号技術PQC(Post-Quantum Cryptography)への対応が進められています。
Go 1.24 で、X25519MLKEM768鍵交換メカニズムがサポートされ、デフォルトで有効になっており、crypto/mlkem パッケージは、ML-KEM-768 および ML-KEM-1024 の実装が含まれています。
動作環境
公式サイトで提供されているバイナリは、以下OS/アーキテクチャで利用可能です。これ以外の OS やアーキテクチャで利用する場合は、ソースからのインストールが必要になります。
|
OS |
アーキテクチャ |
|---|---|
|
Linux |
|
|
macOS |
|
|
Windows 10 以降 |
|
Goのライセンス
Goは、BSD 3-Clause License(修正BSDライセンス)の元で配布されています。
ソースおよびバイナリ形式での再配布・改変が許可されており、再配布時には著作権表示、ライセンス条項、免責条項の保持が求められます。
製品ダウンロード
参考情報
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
Ruby on Rails
ルビーオンレイルズ。Rubyで書かれているオープンソースのWebアプリケーション開発フレームワークです。
-
Java
ジャバ。サンマイクロシステムズ社(2010年にオラクル社に吸収合併)により開発されたプログラミング言語、及びその動作環境である Java VM(ジャバ仮想マシン) です。

