Windows上でGo言語初心者向け学習環境を作る

# この記事は何か

[Windows上でRuby初心者向け学習環境を作る - NaCl非公式ブログ :](https://nacl-ltd.github.io/2017/01/11/learning-environment-of-ruby-on-windows.html)

を参考にした、ローカルにコピーするだけでOKなGo学習環境の作り方です。


# ~~注意点~~

~~本記事で作成する環境ではクロスコンパイルは行えません。クロスコンパイルもできる環境が欲しい人は、次のページの手順などを参考にMinGWの導入から行ってください。~~

~~[Windows7 64bit版でGo言語のクロスコンパイルを試す - taknb2nchのメモ](http://d.hatena.ne.jp/taknb2nch/20140220/1392908216)~~

[2017/1/18追記]
Go 1.5よりmake.batなど実行せずともクロスコンパイル可能になったようでした。

[WindowsCrossCompiling · golang/go Wiki · GitHub](https://github.com/golang/go/wiki/WindowsCrossCompiling)

したがって、以下のように`GOOS`、`GOARCH`環境変数を設定することで、普通にクロスコンパイルできました。また動作確認も取れました。

```bat:Windows(32bit)
set GOOS=windows
set GOARCH=386
go build -o hello-windows-386.exe hello.go
```

```bat:Linux(64bit)
set GOOS=linux
set GOARCH=amd64
go build -o hello-linux-amd64 hello.go
```

# TL;DR;

- [Downloads - The Go Programming Language](https://golang.org/dl/)から`go<バージョン番号>.windows-(386|amd64).zip`をダウンロード
- 開発環境ルートフォルダー(例：`C:\go_env`)を作成し、ダウンロードしたGoのzipファイルを展開
- 開発環境ルートフォルダーの下にソースフォルダー（例：`C:\go_env\src`）を作成
- 必要な環境変数（`GOROOT`、`GOPATH`、`PATH`など）を設定してcmd.exeを起動する`start.bat`を作成

# 作り方

## 1. Goのダウンロード

何はともあれ、まずはGoのダウンロードから始めます。公式サイトのダウンロードページ[Downloads - The Go Programming Language](https://golang.org/dl/)を開き、使用しているWindowsのCPUアーキテクチャに合わせて`go<バージョン番号>.windows-(386|amd64).zip`ファイルをダウンロードします（例：バージョン1.7.4、64bitなら`go1.7.4.windows-amd64.zip`）。

なお、WindowsにはWOW64(Windows on Windows 64)という仕組みがあるため、64bit環境でも32bit版のGoは（変なことをしなければ）大体動作すると思います。もし非プログラマなクライアントに配布してファイル変換してもらう、といったような用途を想定しているのであれば、とりあえず32bit版を導入するというのもありだと思います。

## 2. ルートフォルダーの作成

次に丸ごとコピーするための元となるルートフォルダーを作成します。これはどこでもよいですが、ここでは`C:\go_env`としておきます。

## 3. Goの展開

1.でダウンロードしたzipファイルを、ルートフォルダーに展開します。展開後のフォルダー構成は次のようになります。

```
C:\go_env
  |
  +-go <-展開したフォルダー
    |
    +-api
    |
    +-bin
    |
    :
```

## 4. ソースフォルダーの作成

今度はGoのソースファイルを格納するためのフォルダー`src`をルートフォルダー内に作成します。ソースファイルの`*.go`ファイルは、`src`フォルダーの下に作成するようにしてください。

```
C:\go_env
  |
  +-go
  |
  +-src <-作成したソースフォルダー
```

## 5. 起動用batファイル作成

最後に、Goの実行に必要な環境変数を設定して`cmd.exe`を起動する`start.bat`ファイルをルートフォルダー内に作成します。

```
C:\go_env
  |
  +-go
  |
  +-src
  |
  +-start.bat <-作成したbatファイル
```

```bat:start.bat
@echo off

@rem GoのフォルダーをGOROOTに指定
set GOROOT=%~dp0go
@rem Goのパッケージを配置するフォルダーをGOPATHに指定
set GOPATH=%~dp0.go

@rem Goの実行ファイルをPATHに追加
set PATH=%GOROOT%\bin;%GOPATH%\bin;%PATH%

@rem ソースフォルダーに移動
cd %~dp0src

@rem cmd.exeを起動する
%COMSPEC%
```

batファイル内に登場する`%~dp0`は実行したbatファイルを配置したフォルダーパスを表します。例えば、`GOROOT`に指定した`%~dp0go`は結果として`C:\go_env\go`を表すことになります。

なお、`go get`コマンドによってインストールされるGoパッケージの配置先は、`GOPATH`環境変数への設定値の通り`C:\go_env\.go`になります。`.go`フォルダーは自動的に作成されるので明示的に作成する必要はありません。

`GOROOT`、`GOPATH`環境変数設定後、それぞれの`bin`フォルダーを`PATH`環境変数に追加しておきます。こうすることで、Go本体及び`gocode`等の周辺ツールが起動できるようになります。

参考までにソースファイルを作成し、`go get`を実行した後のフォルダー構成は次のようになります。

```
C:\go_env
  |
  +-.go
  | |
  | +-pkg
  | | |
  | | +-windows_amd64
  | |   |
  | |   +-github.com
  | |     |
  | |     +-...
  | +-src
  |   |
  |   +-windows_amd64
  |     |
  |     +-github.com
  |       |
  |       +-...
  |
  +-go <-展開したフォルダー
  | |
  | +-api
  | |
  | +-bin
  |  |
  |  :
  |
  +-src
    |
    +-hello.go 
```

# 使い方

ルートフォルダーの`start.bat`をダブルクリックして実行すると、`cmd.exe`の黒い画面が起動します。あとは、`src`フォルダー内にソースファイルを作成して、`go run`や`go build`、`go get`コマンドを実行するだけです。

なお、`go tool tour`コマンドを実行して[A Tour of Go](https://tour.golang.org)をローカル起動することもできます。

# 配布

ルートフォルダーごと各PCにコピーしてやればOKです。`start.bat`の内容も相対パスで指定しているため、アクセス権さえあればどこに配置しても大丈夫です（私は`%UserProfile%\go_env`に配置しています）。

# おまけ

Goの学習に使うエディターを好みのもの（例えば[Vim](http://www.vim.org/)）にするなら、`start.bat`にて`PATH`に追加すれば、後は黒い画面で`gvim hello.go`のように起動できます。

```bat:start.batのPATH設定箇所抜粋
@rem Goの実行ファイルをPATHに追加
set PATH=%GOROOT%\bin;%PATH%
@rem エディタのパスをPATHに追加
set PATH=path\to\vim;%PATH%
```

また、[Visual Studio Code](https://code.visualstudio.com/)をインストーラーを使って既定の設定でインストールしていれば、すでに`PATH`環境変数に追加されているはずなので、`code hello.go`のように起動できます。