環境構築 編集

Goのプログラミングを学ぶには、コンパイル・実行環境が必要です。本章では、オンラインコンパイル実行環境、Windows、FreeBSD、GNU/Linuxのディストリビューションの環境構築方法を紹介します。

オンラインコンパイル実行環境 編集

Goのコンパイルと実行をウェブブラウザからオンラインで行えるサイトがあります。オンラインコンパイル実行環境を使用すると、Goのコンパイル環境を構築する必要がないため、スマートフォン、タブレット、ChromebookなどからでもGoのプログラミングを学ぶことができます。以下は代表的なオンラインコンパイル実行環境です。

  1. https://go.dev/play/: 公式のオンラインコンパイル実行環境です。ネットワークサービスは禁止され、時計はいつも同じ時刻を返し、乱数も同じ系列を返します。このため、実行結果は基本的に同じになります。
  2. https://gotipplay.golang.org/: リリース前の開発版のオンラインコンパイル実行環境です。
  3. https://paiza.io/ja/projects/new?language=go: 多くのプログラミング言語のオンラインコンパイル実行環境です。

オンラインコンパイル実行環境は、軽量で使い勝手がよく、学習者にとっては最初の段階でのGoのプログラミング学習に最適です。 ただし、インターネットに接続されていない環境では使用できません。

← タップまたはクリックしてみてください。
package main

import "fmt"

func main() {
	fmt.Println("Hello, World")
}

Windows 編集

Windows環境でのGoのインストールは、以下の手順で行います。

  1. https://golang.org/dl/ から、Windowsのインストーラー(MSIインストーラー)をダウンロードします。
  2. ダウンロードしたインストーラーを実行します。
  3. インストーラーが自動的にパスを設定し、必要なファイルをインストールします。

Goは言語仕様で、「ソースコードは UTF-8 でエンコードされた Unicode テキスト」(Source code is Unicode text encoded in UTF-8.)と決められています[1]。 日本語Windowsの環境では、Microsoftコードページ932に構成設定されているため、エンコーディングの違いによるトラブルに注意する必要があります。

FreeBSD 編集

Go言語の環境構築を行う際、FreeBSD上ではPorts/Packages Collectionを利用して行います。特にFreeBSDでは、Goのバージョン1.22についてはports/lang/go122からビルドやインストールが可能です。

まず、以下のコマンドを使用してGoをビルドし、インストール、そしてクリーンナップします。

% sudo make -C /usr/ports/lang/go122 all install clean

もしくは、ビルド済みのパッケージをインストールする場合は、次のコマンドを使用します。

% sudo pkg install go122-1.22.1

重要な点として、Goのバージョンアップやportsのパッチレベルの更新に伴い、パッケージ名が変わることがあることに留意してください。そのため、最新のパッケージ名を確認する必要があります。次のコマンドを使うことで、最新のGoパッケージ名を検索できます。

% pkg search '^go[1-9]'

ここで、^go[1-9]は正規表現で、"go"で始まり数字1から9のいずれかが続くパッケージ名を検索します。この方法を使って、最新のGoパッケージ名を見つけてください。

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.18.4 windows/amd64
FreeBSDの例
% freebsd-version 
14.0-STABLE
% go122 version
go version go1.22.1 freebsd/amd64
GNU/Linuxの例
$ uname -a
Linux penguin 6.6.13-00891-g1af58030b5c8 #1 SMP PREEMPT_DYNAMIC Sat, 20 Jan 2024 03:54:03 -0800 x86_64 GNU/Linux
$ go version
go version go1.22.2 linux/amd64
Androidで開発バージョンをセルフビルドした例
$ go version
go version devel go1.20-29b9a32 Tue Aug 2 18:52:33 2022 +0000 android/arm64

上記の例では、各プラットフォームでgo versionコマンドを実行することで、Go言語のバージョンとそれが動作するプラットフォーム (OSとアーキテクチャ) が表示されます。バージョンが正しく表示されることを確認することで、Goのインストールが正常に完了していることを確認できます。

Go言語の特徴 編集

動的ではなく静的
どのような型が使われているかをコンピュータに推測させるのではなく、使用する型を定義する必要があります。
インタプリタ型ではなくコンパイル型
プログラムが実行される前にコンパイルされ、最初から直接機械語に変換されるのです。これは、コードを実行するための余分なステップがないため、いくつかの効率化につながる可能性があります。しかし、コードを動的に変更することができないということになります。
厳密なシーケンシャルではなくコンカレント
Goでは、より簡単に同時処理を書いたり考えたりすることができます。これにより、ウェブやサーバーの開発などでよく見られる問題を、よりシンプルな設計で構築することができます。つまり、より複雑なタスクを、互いに通信することで調整される小さなタスクに分割するのです。さらに、この設計の利点は、これらの小さなタスクを並行して実行することができることです。
メモリーセーフ
Goがメモリの使用を処理して、境界を越えてプログラムがクラッシュするのを防ぐことを意味します。
ガベージコレクション
使われなくなったメモリデータを再利用するために解放し、まだ使われているデータをより効率的に保存できることを意味しています。

脚註 編集

  1. ^ “Source code representation ¶”. The Go Programming Language Specification. The Go website. (Jul 26, 2021). https://golang.org/ref/spec#Source_code_representation. 
  2. ^ Goコンパイラーを始めとする、Goの言語処理系と支援環境は、Go自身で書かれています。