【Go言語】Airでサクッとホットリロードする方法

Airを利用して簡単にGo言語のホットリロードができましたので共有します。

Air: https://github.com/cosmtrek/air

インストール

$ go get -u github.com/cosmtrek/air

パスを通す(設定していない場合)

$HOME/go/binにパスを通します。

$ vim ~/.bash_profile 

.bash_profile

export PATH="$HOME/go/bin:$PATH"

パス反映

$  source ~/.bash_profile 

確認

$ air -v

  __    _   ___  
 / /\  | | | |_) 
/_/--\ |_| |_| \_ v1.12.3 // live reload for Go apps, with Go1.14.0

Airの設定ファイルを作成

プロジェクトのrootディレクトリにファイル.air.tomlを作成します。

cd /path/to/your_project
vim .air.toml

.air.toml

# Config file for [Air](https://github.com/cosmtrek/air) in TOML format

# Working directory
# . or absolute path, please note that the directories following must be under root.
root = "."
tmp_dir = "tmp"

[build]
# Just plain old shell command. You could use `make` as well.
cmd = "go build -o ./tmp/main ."
# Binary file yields from `cmd`.
bin = "tmp/main"
# Customize binary.
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
# Watch these filename extensions.
include_ext = ["go", "tpl", "tmpl", "html"]
# Ignore these filename extensions or directories.
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]
# Watch these directories if you specified.
include_dir = []
# Exclude files.
exclude_file = []
# This log file places in your tmp_dir.
log = "air.log"
# It's not necessary to trigger build each time file changes if it's too frequent.
delay = 1000 # ms
# Stop running old binary when build errors occur.
stop_on_error = true
# Send Interrupt signal before killing process (windows does not support this feature)
send_interrupt = false
# Delay after sending Interrupt signal
kill_delay = 500 # ms

[log]
# Show log time
time = false

[color]
# Customize each part's color. If no color found, use the raw app log.
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"

[misc]
# Delete tmp directory on exit
clean_on_exit = true

実行


airコマンドで.air.tomlファイルの設定にしたがって実行されます。

$ air
  __    _   ___  
 / /\  | | | |_) 
/_/--\ |_| |_| \_ v1.12.3 // live reload for Go apps, with Go1.14.0

watching .
watching config
watching controller
watching model
watching router
!exclude tmp
building...
running...

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.1.17
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______

起動しました!

ホットリロード

ファイルを更新してみます。

	
func main() {
    fmt.Println("###### hello #####")
}

結果

main.go has changed
building...
running...
###### hello #####

ファイルを変更すると再コンパイルされて表示が変わりました!
ホットリロードの確認ができました。