Dulu saya selalu menggunakan fresh untuk membantu saya menjalankan ulang program yang ditulis menggunakan golang secara otomatis tiap kali source code program berubah. Namun karena struktur direktori yang sedikit berbeda, saya perlu mencari cara lain.
Berbekal fswatch dan Makefile, masalah ini akhirnya terselesaikan. Sebagai catatan, potongan kode di bawah baru saya tes pada sistem operasi macOS.
PID = /tmp/unique_app_name.pid
GO_FILES = ./cmd/main.go
APP = ./unique_app_name
serve: restart
@fswatch -o -e ".*" -i ".*/[^.]*\\.go$$" . | xargs -n1 -I{} make restart || make kill
kill:
@kill `cat $(PID)` >> /dev/null 2>&1 || true
compile:
@echo "Rebuilding application ..."
@go build -race -x -v -o $(APP) $(GO_FILES)
restart: kill compile
@$(APP) & echo $$! > $(PID)
.PHONY: serve restart kill compile # let's go to reserve rules names
Penyesuaian yang perlu dilakukan ada pada baris 1 hingga 3. Ganti nilai dari masing-masing variable tersebut sesuai kebutuhan. Lalu jalankan dengan perintah dibawah ini.
make serve
Happy coding!