我编写的API代码存在于我的$ GOPATH中,但主文件位于系统的其他位置。我试图让我的主文件退出,并在保存某些文件时再次启动。我最接近的是使用find
和entr
的组合:
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来宾计算机中的已更改文件。
答案 0 :(得分:0)
根据评论,您使用的是entr
的旧版本,只会导致go run
进程被杀,而您的Go程序仍在运行。运行3.1或更新版本的entr
也会将终止信号发送到Go可执行文件,这可以解决问题。
如果可能的话,将entr
升级到当前版本(3.6)或至少3.1+。如果这是不可能的,一个解决方案是编写一个包装程序来处理终止信号。该程序将运行go run
并观察终止信号。收到该信号后,你的包装器会同时杀死go run
和你的Go程序。