# Golangのnet/httpでホットリロードの恩恵を受けたい
Table of Contents
ホットリロードが欲しい
普段メインでreactとかAngularを使用しているので、標準でホットリロードが搭載されていることが当然になっていた。
しかしGoのnet/httpにはない。これが本当に開発体験に悪影響を及ぼしている。
ということで、何とかできないか調べてみた。
Goのバージョン
go => 1.21.4DevContainerを使ってみる
Go net/httpサーバーのホットリロードにAirを使ってみた
Devcontainerに airをインストールして、DevContainer上で実行する。
色々調べた結果上記が1番楽そうだったので、やってみる。
やり方は上記の記事を引用する。
- リポジトリ直下に .devcontainer フォルダ作成
- .devcontainerフォルダ内に 下記内容のdevcontainer.json を作成。
{"name": "Go","image": "mcr.microsoft.com/devcontainers/go:0-1-bullseye","features": {"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {"moby": true,"installDockerBuildx": true,"version": "latest","dockerDashComposeVersion": "v2"}},"postCreateCommand": "go install github.com/cosmtrek/air@latest"}
- 保存し、プロジェクトを再度開き直す
- DevContainerを開くかどうかVSCodeに確認されるので、DevContainerとして開き直す
- インストール完了後 プロンプト上で air と打って Airを立ち上げる
順序通りやったところ、
DevContainerを開くかどうかVSCodeに確認されるので、DevContainerとして開き直す
の箇所で、
[+] Building 903.3s (2/3) => [internal] load build definition from Dockerfile.extended 0.3s => => transferring dockerfile: 2.76kB 0.1s => [internal] load .dockerignore 0.3s => => transferring context: 2B 0.0s => resolve image config for docker.io/docker/dockerfile:1.4 902.4s上記のようにとんでもなく時間がかかった結果諦めた。
これはWindowsとDocker問題🤔?
WSLで再トライ
ということでWSL上に移して実行してみる。
Windows上で実行するよりは早いけど、それでもめちゃくちゃ時間がかかった。
で、実行してみたところ
go.mod:3: invalid go version 'v1.21.4': must match format 1.23というエラーが出たので、バージョンをgo 1.21.4からgo 1.21に変更し再度挑戦してみる。
building...no Go files in /workspaces/ProjectNamefailed to build, error: exit status 1running.../bin/sh: 1: /workspaces/ProjectName/tmp/main: not foundホットリロードは確認できたけど…
次に上記エラーが出たので、main.goを/srcからrootに移動した結果、ホットリロードが動いていることが確認できた。
ただデーターベースに接続できなくなったし、やっぱり/srcの下に開発ファイルを置きたい。
ここで時間使うのももったいないので、いったん諦める。戦略的撤退。
ホットリロードが動くことは確認できたので、とりあえず満足した。
いつかまた挑戦する。