はじめに
年末年始の時間を使って Go 言語に入門してみようと思い立ち、まずは Go 言語の実行環境を用意しなくてはということで、WSL2環境上にGo 言語の実行環境を用意した際のメモです。
目次
ざっくり下記の内容になります。
- WSLディストリビューションをインストール
- Go言語環境構築
1.WSLディストリビューションをインストール
まずはLinuxディストリビューションを指定して環境を用意します。
今回は「Ubuntu」を使ってみます。
「Ubuntu」のインストール
「wsl --install」コマンドで Ubuntu をインストールします。
(※既にインストール済みの場合はその旨のメッセージが表示されます。デフォルトではUbuntuがインストールされます。)
wsl --install
Linux 用 Windows サブシステムは既にインストールされています。.インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <Distro>' を使用してインストールします。NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.5 openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed openSUSE Tumbleweed
続いて、インストールした「Ubuntu」ディストリビューションを使い、Go 言語用のUbuntu 環境を用意していきます。
Ubuntu ディストリビューションのエクスポート
下記のコマンドで Ubuntu ディストリビューションをエクスポートします。
(※ここでエクスポートしたファイルを使って、後ほど Go 言語用の環境を用意します。)
数分後「ubuntu.tar」ファイルが作成されます。
Ubuntu ディストリビューションのインポート
下記のコマンドで先ほどエクスポートした Ubuntu ディストリビューションをインポートします。
wsl --import ubuntugolang ./ubuntugolang ubuntu.tar
数分後、コマンドの実行が完了するので、下記のコマンドでちゃんとインポートされたか確認します。
wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
ubunturust Stopped 2
ubuntuweb Stopped 2
ubuntudocker Stopped 2
ubuntunodejs Stopped 2
ubuntuaws Stopped 2
docker-desktop-data Stopped 2
ubuntupythonanaconda Stopped 2
ubuntugolang Stopped 2
ubuntupython Stopped 2
ubuntu001 Stopped 2
「ubuntugolang」 が追加されていることが確認できました。
2.Go言語環境構築
作成した「ubuntugolang」を起動して、Go言語環境構築を進めていきます。
Ubuntu ディストリビューションを起動(wsl -d コマンド)
wsl -d ubuntugolang
Linux 用の Windows サブシステムが Microsoft Store で入手可能になりました。
'wsl.exe --update' を実行するか、https://aka.ms/wslstorepage
にアクセスしてアップグレードできます。Microsoft Store から WSL をインストールすると、最新の WSL 更新がより速く提供されます。
詳細については、https://aka.ms/wslstoreinfo
をご覧ください。
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.10.16.3-microsoft-standard-WSL2 x86_64)* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantageSystem information as of Sat Dec 30 15:19:44 JST 2023
System load: 0.08 Processes: 8
Usage of /: 2.1% of 250.98GB Users logged in: 0
Memory usage: 1% IPv4 address for eth0: 172.20.132.83
Swap usage: 0%
1 update can be applied immediately.
To see these additional updates run: apt list --upgradable
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
This message is shown once a day. To disable it please create the
/root/.hushlogin file.
Go言語のインストールバージョンを確認
go version
Command 'go' not found, but can be installed with:
snap install go # version 1.18.3, or
apt install golang-go # version 2:1.13~1ubuntu2
apt install gccgo-go # version 2:1.13~1ubuntu2
※当然まだGo言語をインストールしていないのでバージョンが確認できません。
ただ有難いことに、インストールコマンドを提示してくれています。
ここで提示してくれた snap install コマンドでGo言語をインストールしていきます。
snap install go
error: cannot communicate with server: Post http://localhost/v2/snaps/go: dial unix /run/snapd.socket: connect: no such file or directory
snap 動かない。。?
systemd を使用して WSL で Linux サービスを管理する | Microsoft Learn
どうやら systemd を有効にする必要があるようなので、上記に記載のある通り、/etc/wsl.conf を用意して、下記の内容を追記、その後 「ubuntugolang」を再度起動しました。
[boot]
systemd=true
その後再度 Go 言語のインストールにトライ。
snap install go
error: This revision of snap "go" was published using classic confinement and thus may perform
arbitrary system changes outside of the security sandbox that snaps are usually confined to,
which may put your system at risk.If you understand and want to proceed repeat the command including --classic.
「--classic」を付けるように言われているので、「--classic」を付けてリトライ。
snap install go --classic
go 1.21.5 from Canonical✓ installed
※数分後、インストールが完了し、下記のコマンドでバージョンも確認できました。
最後に、Hello World を試してみました。
下記の内容を記述したファイルを用意し、
package main
import "fmt"
func main() {
fmt.Printf("Hello World\n")
}
go run コマンドで実行し、はじめてのGo言語のコードの実行ができました。
go run hello.go
Hello World
終わりに
久々の WSL でエラーであたふたしましたが、無事に Go 言語環境が用意できました。
まずはチュートリアルから学習を進めていきたいと思います。
参考情報
WSL の基本的なコマンド | Microsoft Learn