Go/環境構築
環境構築
[編集]Goのプログラミングを学ぶには、コンパイル・実行環境が必要です。本章では、オンラインコンパイル実行環境、Windows、FreeBSD、GNU/Linuxのディストリビューションの環境構築方法を紹介します。
オンラインコンパイル実行環境
[編集]Goのコンパイルと実行をウェブブラウザからオンラインで行えるサイトがあります。オンラインコンパイル実行環境を使用すると、Goのコンパイル環境を構築する必要がないため、スマートフォン、タブレット、ChromebookなどからでもGoのプログラミングを学ぶことができます。以下は代表的なオンラインコンパイル実行環境です。
- Go Playground - The Go Programming Language: 公式のオンラインコンパイル実行環境です。ネットワークサービスは禁止され、時計はいつも同じ時刻を返し、乱数も同じ系列を返します。このため、実行結果は基本的に同じになります。
- The Gotip Playground: リリース前の開発版のオンラインコンパイル実行環境です。
- paiza.IO' : 多くのプログラミング言語のオンラインコンパイル実行環境です。
オンラインコンパイル実行環境は、軽量で使い勝手がよく、学習者にとっては最初の段階でのGoのプログラミング学習に最適です。 ただし、インターネットに接続されていない環境では使用できません。
- 例 ← タップまたはクリックしてみてください。
package main import "fmt" func main() { fmt.Println("Hello, World") }
Windows
[編集]Windows環境でのGoのインストールは、以下の手順で行います。
- https://golang.org/dl/ から、Windowsのインストーラー(MSIインストーラー)をダウンロードします。
- ダウンロードしたインストーラーを実行します。
- インストーラーが自動的にパスを設定し、必要なファイルをインストールします。
- インストール後、コマンドプロンプトで
go versionを実行し、Goが正しくインストールされていることを確認します。
Goのソースコードエンコーディング
[編集]Goは言語仕様で、「ソースコードは UTF-8 でエンコードされた Unicode テキスト」(Source code is Unicode text encoded in UTF-8.
)と決められています[1]。
日本語Windows環境でのエンコーディングの問題
[編集]日本語Windowsの環境では、初期状態はMicrosoftコードページ932(Shift_JIS)に構成設定されているため、エンコーディングの違いによるトラブルに注意する必要があります。例えば、CP932でエンコードされたソースファイルをGoでコンパイルしようとすると、いわゆる文字化けやコンパイルエラーが発生する可能性があります。
FreeBSD
[編集]Go言語の環境構築を行う際、FreeBSD上ではPorts/Packages Collectionを利用して行います。例えば、ディフォルトのGoについてはports/lang/goからビルドやインストールが可能です。
ソースからのビルドとインストール
[編集]まず、以下のコマンドを使用してGoをビルドし、インストール、そしてクリーンナップします。
doas make -C /usr/ports/lang/go install clean
ビルド済みパッケージのインストール
[編集]もしくは、ビルド済みのパッケージをインストールする場合は、次のコマンドを使用します。
doas pkg install go-1.24_12,2
Goパッケージの検索
[編集]重要な点として、Goのバージョンアップやportsのパッチレベルの更新に伴い、パッケージ名が変わることがあることに留意してください。そのため、最新のパッケージ名を確認する必要があります。次のコマンドを使うことで、最新のGoのメタパッケージを検索できます。
% pkg search '^go-1' go-1.24_12,2 Meta-port for the default version of the Go programming language
ここで、^go-は正規表現で、"go-"で始まるパッケージ名を検索します。例えば、go-1.24_12,2やgo-1.25_13,2などのパッケージ名がヒットします。この方法を使って、最新のGoパッケージ名を見つけてください。
Goの最新バージョンとPortsの非同期について
[編集]FreeBSDのPortsでは、Goの最新バージョンとPortsのバージョンに非同期が生じることがあります。例えば、Goの公式リリースが1.25であっても、Portsでは1.24が最新である場合があります。このような場合、Portsの更新を待つか、ソースからビルドする必要があります。
GNU/Linuxのディストリビューション
[編集]GNU/Linuxのディストリビューションの場合、ディストリビューションによってパッケージマネージャーとリポジトリの構成が異なりますが、配布されているGoをそのままインストールすることができます。
パッケージマネージャーの検索機能を使用して、go- あるいは golang- をキーワードに検索してパッケージの名前を調べ、インストールしてください。ただし、ディストリビューションによっては、バージョンが古くなる場合があるため、定期的にパッケージアーカイブが更新されていないか確認することが重要です。
最新版が必要な場合は、公式ウェブサイトからバイナリーオプションの配布物をダウンロードするか、ソースコードを入手して、環境に合わせてビルドとインストールを行うことができます。Goはセルフホスティング[2]でビルドされるため、最初にバイナリーを入手してブートストラップするか、クロスコンパイルでターゲットでセルフコンパイルすることができます。
動作確認
[編集]Go言語の環境構築が完了した後は、バージョンが正しくインストールされているか確認する必要があります。バージョンの確認は、go versionコマンドを使用して行います。
例えば、Windows、FreeBSD、GNU/Linux、Androidなどの環境での表示結果の例を示します。
- Windowsの例 (Windows PowerShell)
PS C:\Users\myname> go version go version go1.25.2 windows/amd64
- FreeBSDの例
% freebsd-version 14.3-STABLE % go125 version go version go1.25.2 freebsd/amd64
- GNU/Linuxの例
$ uname -a Linux acer 6.6.88-08507-gc5e3cc23fa55 #1 SMP PREEMPT_DYNAMIC Fri, 1 Aug 2025 01:52:13 -0700 x86_64 GNU/Linux $ go version go version go1.25.2 linux/amd64
上記の例では、各プラットフォームでgo versionコマンドを実行することで、Go言語のバージョンとそれが動作するプラットフォーム (OSとアーキテクチャ) が表示されます。バージョンが正しく表示されることを確認することで、Goのインストールが正常に完了していることを確認できます。
Go言語の特徴
[編集]- 静的型付け:
- Goは静的型付け言語であり、変数の型はコンパイル時に決定されます。型推論(
:=を使った変数宣言)はありますが、あくまでコンパイル時に型が決定されるため、動的型付けではありません。
- Goは静的型付け言語であり、変数の型はコンパイル時に決定されます。型推論(
- コンパイル型言語:
- Goはコンパイル型言語であり、ソースコードは機械語にコンパイルされてから実行されます。これにより、実行時のパフォーマンスが向上します。ただし、コンパイル型言語であるため、実行時にコードを動的に変更することはできません。
- 並行処理(コンカレンシー):
- Goは並行処理(コンカレンシー)をサポートしており、ゴルーチン(goroutine)とチャネル(channel)を使って簡単に並行処理を実装できます。これにより、複雑なタスクを小さなタスクに分割し、並行して実行することができます。特に、ウェブサーバーやネットワークアプリケーションの開発において、この設計が役立ちます。
- メモリセーフ:
- Goはメモリセーフであり、配列やスライスの境界チェックを行い、バッファオーバーフローを防ぎます。また、ポインタ演算が制限されているため、メモリ安全性が高くなっています。
- ガベージコレクション:
- Goはガベージコレクションを備えており、使われなくなったメモリを自動的に解放します。これにより、メモリリークを防ぎ、メモリ管理が容易になります。
- ジェネリクスの導入(Go 1.18):
- Go 1.18でジェネリクス(Generics)が正式に導入されました。これにより、型パラメータを使った汎用的な関数やデータ構造を定義できるようになりました。
- ワークスペースモードの導入(Go 1.18):
- Go 1.18でワークスペースモード(Workspace Mode)が導入されました。これにより、複数のモジュールを同時に開発する際に、
go.workファイルを使って依存関係を管理できるようになりました。
- Go 1.18でワークスペースモード(Workspace Mode)が導入されました。これにより、複数のモジュールを同時に開発する際に、
- ファジングテストのサポート(Go 1.18):
- Go 1.18でファジングテスト(Fuzz Testing)が正式にサポートされました。これにより、ランダムな入力を生成してプログラムの脆弱性を検出するためのテスト手法が利用可能になりました。
- パフォーマンスの向上:
- Go 1.17以降、ランタイムやコンパイラの最適化が進み、全体的なパフォーマンスが向上しています。特に、ガベージコレクションの効率化や、並行処理のパフォーマンス改善が顕著です。
- 新しい標準ライブラリの追加:
- Go 1.17以降、新しい標準ライブラリが追加され、開発者がより便利に使えるようになりました。例えば、
net/netipパッケージが追加され、IPアドレスの操作がより効率的に行えるようになりました。
- Go 1.17以降、新しい標準ライブラリが追加され、開発者がより便利に使えるようになりました。例えば、
- モジュールの改良:
- Go 1.17以降、モジュールシステムがさらに改良され、依存関係の管理がより柔軟になりました。特に、
go mod tidyコマンドがより賢くなり、不要な依存関係を自動的に削除するようになりました。
- Go 1.17以降、モジュールシステムがさらに改良され、依存関係の管理がより柔軟になりました。特に、
- ツールチェーンの改良:
- Go 1.17以降、ツールチェーンが改良され、開発者がより便利に使えるようになりました。例えば、
go vetコマンドがより多くの潜在的なバグを検出するようになりました。
- Go 1.17以降、ツールチェーンが改良され、開発者がより便利に使えるようになりました。例えば、
- セキュリティの強化:
- Go 1.17以降、セキュリティ関連の機能が強化されました。例えば、
crypto/ecdhパッケージが追加され、楕円曲線ディフィー・ヘルマン(ECDH)鍵交換がより簡単に行えるようになりました。
- Go 1.17以降、セキュリティ関連の機能が強化されました。例えば、
- 新しいビルド要素のサポート:
- Go 1.17以降、新しいビルド要素がサポートされ、より柔軟なビルド設定が可能になりました。例えば、
//go:buildディレクティブが追加され、従来の// +buildディレクティブよりも直感的にビルド要素を指定できるようになりました。
- Go 1.17以降、新しいビルド要素がサポートされ、より柔軟なビルド設定が可能になりました。例えば、
- WASIサポートの実験的導入(Go 1.21):
- Go 1.21でWASI(WebAssembly System Interface)のサポートが実験的に導入されました。これにより、GoのコードをWebAssembly(Wasm)として実行できるようになりました。
脚註
[編集]- ^ “Source code representation ¶”. The Go Programming Language Specification. The Go website. (Jul 26, 2021).
- ^ Goコンパイラーを始めとする、Goの言語処理系と支援環境は、Go自身で書かれています。