Go 概要
Go の概要、主な特徴、動作環境
Go の概要
Go は 2009 年に Google が発表したオープンソースのプログラミング言語である。静的型付け言語の利点と、簡潔な開発体験を組み合わせている。
Go が登場する以前、Google のサーバーソフトウェアでは C++ や Java などが広く使われていた。一方、開発の手軽さを優先する開発者は Python や JavaScript などの動的型付けインタープリター言語を選んでいた。Go は効率的なコンパイルと実行を保ちながら、簡潔に記述できる言語として開発された。
Go は不要な複雑さを積極的に減らしている。ヘッダーファイルは不要で、宣言は一度だけ記述する。クラス階層、例外処理、アサーション文、オーバーロードはない。ジェネリクスは Go 1.18 からサポートされている。
現在は多くの企業で利用されており、Docker と Kubernetes は Go で実装された代表的なソフトウェアである。
主な特徴
- フォーマット:
gofmtまたはgo fmtでコードを自動整形できる。 - コメント: ブロックコメントには
/* */、行コメントには//を使用する。 - 命名: パッケージ名は通常、小文字の英単語 1 語にする。先頭が大文字の識別子はパッケージ外へ公開される。
- セミコロン: 文末のセミコロンは通常省略する。
- 制御構文:
:=で型を明示せずに変数を宣言できる。ifとforの条件に括弧は不要である。whileとdo-whileの代わりにforを使用する。switchの各caseでは通常breakは不要である。 - 関数: 複数の戻り値を返せる。
deferでミューテックスのロック解除やファイルのクローズなどを予約できる。 - データ: ゼロ値の領域には
new、スライス、マップ、チャネルにはmakeを使用する。コンストラクター相当の関数名は慣例としてNewで始める。 - 初期化:
init関数でプログラム実行前にパッケージの状態を準備できる。 - メソッド: クラスはないが、レシーバー引数を使って任意の型にメソッドを定義できる。
- インターフェース: 型はインターフェースを暗黙的に満たす。引数にインターフェースを使えば具象型への依存を減らせる。
- ブランク識別子: 意図的に使用しない値には
_を使用する。 - 埋め込み: クラス継承の代わりに構造体やインターフェースを埋め込める。
- 並行処理: goroutine で非同期処理を開始し、チャネルで通信する。チャネル操作の待機には
selectを使う。 - エラー: 関数は一般に
error値を返す。例外的な状況にはpanicとrecoverも使用できる。
動作環境
公式ダウンロードページでは、OS とアーキテクチャに応じたインストーラーやアーカイブを提供している。サポート範囲は Go のバージョンによって変わるため、インストール前に Go ダウンロードページ と 最小要件 を確認する。
| OS | アーキテクチャ | 備考 |
|---|---|---|
| Linux | 複数 | Go 1.24 以降は Linux カーネル 3.2 以降が必要である。 |
| macOS | x86_64, ARM64 | Go 1.26 は macOS 12 Monterey 以降が必要である。 |
| Windows | x86, x86_64, ARM64 | Go 1.21 以降は Windows 10 または Windows Server 2016 以降が必要である。 |
| その他の OS | OS による | FreeBSD、OpenBSD などは公式文書を確認する。 |
関連するオープンソース言語
Go は複数の言語ファミリーからアイデアを取り入れている。
- 基本構文は C ファミリー
- 宣言とパッケージは Pascal、Modula、Oberon ファミリー
- 並行処理は Newsqueak と Limbo
ライセンス
Go は BSD スタイルのライセンスで配布される。著作権表示、ライセンス条文、無保証の明記を維持する条件で変更と配布が認められている。