Goのプログラミングを学ぶには、コンパイル・実行環境が必要です。本章では、オンラインコンパイル実行環境、Windows、FreeBSD、GNU/Linuxのディストリビューションの環境構築方法を紹介します。
Goのコンパイルと実行をウェブブラウザからオンラインで行えるサイトがあります。オンラインコンパイル実行環境を使用すると、Goのコンパイル環境を構築する必要がないため、スマートフォン、タブレット、ChromebookなどからでもGoのプログラミングを学ぶことができます。以下は代表的なオンラインコンパイル実行環境です。
https://go.dev/play/: 公式のオンラインコンパイル実行環境です。ネットワークサービスは禁止され、時計はいつも同じ時刻を返し、乱数も同じ系列を返します。このため、実行結果は基本的に同じになります。
https://gotipplay.golang.org/: リリース前の開発版のオンラインコンパイル実行環境です。
https://paiza.io/ja/projects/new?language=go: 多くのプログラミング言語のオンラインコンパイル実行環境です。
オンラインコンパイル実行環境は、軽量で使い勝手がよく、学習者にとっては最初の段階でのGoのプログラミング学習に最適です。
ただし、インターネットに接続されていない環境では使用できません。
[https://go.dev/play/p/X0_wfzwyj-E 例] ← タップまたはクリックしてみてください。:
package main
import "fmt"
func main() {
	fmt.Println("Hello, World")
}
Windows環境でのGoのインストールは、以下の手順で行います。
https://golang.org/dl/ から、Windowsのインストーラー（MSIインストーラー）をダウンロードします。
ダウンロードしたインストーラーを実行します。
インストーラーが自動的にパスを設定し、必要なファイルをインストールします。
Goは言語仕様で、「ソースコードは UTF-8 でエンコードされた Unicode テキスト」(''Source code is Unicode text encoded in UTF-8.'')と決められています
。
日本語Windowsの環境では、Microsoftコードページ932に構成設定されているため、エンコーディングの違いによるトラブルに注意する必要があります。
FreeBSDの場合、Ports/Packages Collectionのports/lang/goから、以下のコマンドでビルドしインストールが可能です。
% sudo make -C /usr/ports/lang/go all install clean
また、ビルド済みパッケージをインストールする場合は、以下のコマンドで行います。
% sudo pkg install go119-1.19_1
ただし、Goのバージョンアップやportsのパッチレベルの更新により、パッケージ名が変わることがあるため、事前に最新のパッケージ名を確認する必要があります。以下のコマンドで、最新のパッケージ名を検索することができます。
% pkg search '^go[1-9]'
GNU/Linuxのディストリビューションの場合、ディストリビューションによってパッケージマネージャーとリポジトリの構成が異なりますが、配布されているGoをそのままインストールすることができます。
パッケージマネージャーの検索機能を使用して、go- あるいは golang- をキーワードに検索してパッケージの名前を調べ、インストールしてください。ただし、ディストリビューションによっては、バージョンが古くなる場合があるため、定期的にパッケージアーカイブが更新されていないか確認することが重要です。
最新版が必要な場合は、公式ウェブサイトからバイナリーオプションの配布物をダウンロードするか、ソースコードを入手して、環境に合わせてビルドとインストールを行うことができます。GoはセルフホスティングGoコンパイラーを始めとする、Goの言語処理系と支援環境は、Go自身で書かれています。でビルドされるため、最初にバイナリーを入手してブートストラップするか、クロスコンパイルでターゲットでセルフコンパイルすることができます。
インストール作業が完了したらバージョンの確認を行いましょう。
コマンド:
go version
でバージョンを確認できます。
Windowsでの表示結果の例:(Windows PowerShell)
PS C:\Users\myname> go version
go version go1.18.4 windows/amd64
FreeBSDでの表示結果の例 :
% go version
go version go1.18.4 freebsd/amd64
GNU/Linuxのあるディストリビューションでの表示結果の例:
$ go version
go version go1.14.3 linux/amd64
Android で開発バージョンをセルフビルドした例:
$ go version
go version devel go1.20-29b9a32 Tue Aug 2 18:52:33 2022 +0000 android/arm64
動的ではなく静的
どのような型が使われているかをコンピュータに推測させるのではなく、使用する型を定義する必要があります。
インタプリタ型ではなくコンパイル型
プログラムが実行される前にコンパイルされ、最初から直接機械語に変換されるのです。これは、コードを実行するための余分なステップがないため、いくつかの効率化につながる可能性があります。しかし、コードを動的に変更することができないということになります。
厳密なシーケンシャルではなくコンカレント
Goでは、より簡単に同時処理を書いたり考えたりすることができます。これにより、ウェブやサーバーの開発などでよく見られる問題を、よりシンプルな設計で構築することができます。つまり、より複雑なタスクを、互いに通信することで調整される小さなタスクに分割するのです。さらに、この設計の利点は、これらの小さなタスクを並行して実行することができることです。
メモリーセーフ
Goがメモリの使用を処理して、境界を越えてプログラムがクラッシュするのを防ぐことを意味します。
ガベージコレクション
使われなくなったメモリデータを再利用するために解放し、まだ使われているデータをより効率的に保存できることを意味しています。