lelelemon’s blog

カメの歩みでのんびり学んでいます。

【WSL2】Golang実行環境構築

はじめに

年末年始の時間を使って Go 言語に入門してみようと思い立ち、まずは Go 言語の実行環境を用意しなくてはということで、WSL2環境上にGo 言語の実行環境を用意した際のメモです。

 

目次

ざっくり下記の内容になります。

  1. WSLディストリビューションをインストール
  2. Go言語環境構築

 

1.WSLディストリビューションをインストール

まずはLinuxディストリビューションを指定して環境を用意します。

今回は「Ubuntu」を使ってみます。

 

Ubuntu」のインストール


「wsl --install」コマンドで Ubuntu をインストールします。

(※既にインストール済みの場合はその旨のメッセージが表示されます。デフォルトではUbuntuがインストールされます。)

 wsl --install
LinuxWindows サブシステムは既にインストールされています。.

インストールできる有効なディストリビューションの一覧を次に示します。
'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 言語用の環境を用意します。)

wsl --export Ubuntu ./ubuntu.tar

数分後「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/advantage

  System 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

 

※数分後、インストールが完了し、下記のコマンドでバージョンも確認できました。

go version
go version go1.21.5 linux/amd64

 

最後に、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

systemd を使用して WSL で Linux サービスを管理する | Microsoft Learn

(Ubuntu) snapが動かない時のチェック #Ubuntu - Qiita