我有写在我的$ 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