我有寫在我的$ GOPATH中的API代碼,但主文件位於系統的其他位置。我試圖讓我的主文件退出,並啓動,並再次保存某些文件。我已經得到的最接近的是通過使用find
和entr
組合:在文件上重新啓動golang服務器的最佳方式
find $GOPATH/github.com/example/example -path $GOPATH/example/example/vendor -prune -o -name '*.go' -print | entr -r go run /vagrant/script/api/main.go
但由於某些原因entr
無法再次啓動導致錯誤消息之前下關閉服務:
ListenAndServe: listen tcp 127.0.0.1:1456: bind: address already in use
對於允許實時重新加載go服務器的任何解決方案都是開放的,但配置/設置要求越少越好,因爲我希望在多個項目中重用該解決方案。
不知道這是一個問題,但我也應該注意到,我使用vagrant-fsnotify保存在主機上時,可以觸摸我的Vagrant來賓機器中已更改的文件。
我的第一個懷疑是'entr'只會殺死'go run'進程,讓你的Go程序仍在運行。但是'entr'文檔說,從3.1開始,它「確保所有的子進程接收到一個信號」,目前的版本是3.6。你編譯的Go程序應該是'go run'的子進程,所以如果你正在使用'entr'的最新版本,我猜可能不是這樣。 (您是否使用最新的'entr'?) –
@DarshanRivka稍微我今天用apt-get install安裝了它。我猜這個程序沒有--version選項,所以我不知道我使用的是哪個版本。 – tanman
Scratch,它看起來像Ubuntu 14(我正在使用)它只在版本2.5。我會嘗試手動安裝最新版本,看看是否可以解決問題。 – tanman