私の$ 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を使用しています。
私の最初の疑惑は、 'entr'が' go run'プロセスだけを強制終了させて、あなたのGoプログラムをまだ実行しているということです。しかし、 'entr'ドキュメンテーションは、3.1の時点で、すべての子プロセスがシグナルを受け取ることを保証し、現在のバージョンは3.6です。あなたのコンパイルされたGoプログラムは 'go run'の子プロセスでなければなりません。もしあなたが最近のバージョンの' entr'を使っているのであれば、おそらくそうではないでしょう。 (あなたは最新の 'entr'を使っていますか?) –
@DarshanRivkaWhittle今日はapt-getをインストールしてインストールしました。私はプログラムには--versionオプションがないので、私が使っているバージョンを知ることができないと思います。 – tanman
Ubuntu 14(これは私が使用している)のように見えるのは、バージョン2.5だけです。手動で最新のバージョンをインストールして問題が解決されるかどうか確認します。 – tanman