AppEngineがこれを行うことは知っていますが、コーディングはしていません。
Guard
from Ruby worldを使用して、.go
ファイルの変更をリッスンし、次のコマンドを実行してみました。
killall foo
go build -race
./foo &
ただし、foo
をバックグラウンドに送信することはなく、無期限にハングします。
この問題をどのように解決していますか?ソリューションもクロスプラットフォームである必要があります(GNU/LinuxおよびMac)。
友人がgo用の簡単なCompileDaemonを作成し、私自身の小さなnet/http-projectsの魅力のように機能しました。
ここでリポジトリを見つけることができます: https://github.com/githubnemo/CompileDaemon
CodegangstaのGinを試すこともできます。ファイアアンドフォーゲットです。
https://github.com/codegangsta/gin
編集:私は CompileDaemon 最近は好きです。ジンは時々リクエストを受け付けません
最近、 reflex ツールを発見しました。それは速く、魅力のように機能します。これは、nodemon(nodejs worldから)およびguard(Ruby worldから))と非常によく似ています。
ほとんどの場合、私は以下のようにそれを使用しています:
_reflex -d none -s -R vendor. -r \.go$ -- go run cmd/server/main.go
_
ただし、次のような内容の.reflexなどのファイルにオプションを含める方が便利な場合があります。
_-d none -s -R vendor. -r \.go$
_
だからあなたはそれをこのように実行するだけです
reflex $(cat .reflex) -- go run cmd/server/main.go
「ホットリロード」テストにも同じことができます。
reflex $(cat .reflex) -- go test ./... -v
同時に実行するコマンドの数を指定できるconfigオプションもありますが、私は実際には使用していません。
これにはnodemon
を使用できます。構成、監視するファイル、無視するファイル、およびファイルが変更されたときに実行するコマンドを含むnodemon.jsonファイルを作成するだけです。この構成のようなもの。
nodemon.json
{
"watch": ["*"],
"ext": "go graphql",
"ignore": ["*gen*.go"],
"exec": "go run scripts/gqlgen.go && (killall -9 server || true ) && go run ./server/server.go"
}
これを機能させるには、nodejsが必要です。
しかし、これまでに使用した特定のツールよりもはるかに優れています。
誰かがまだ解決策を探しているなら、私はこれを行うためにいくつかのシェルスクリプトを書きました、そしてそれはdocker環境、 https://github.com/zephinzer/golang-dev のリポジトリを介して使用できます
標準のLinuxツール(inotifyとbash)を使用していた単純なソリューションを探してインターネットをスクロールした後、私はその仕事をするこの単純なbashスクリプトを作成することになりました。
Golang:1.12を実行し、go run .
を使用してファイルを提供するコンテナーでテストしました。使用する前にスクリプトを読んでください。フォルダ名によってはgo run
プロセスが強制終了され、実行している他のプロセスと競合する場合はそれらが強制終了される可能性があります。
#!/bin/bash
go run . &
while inotifywait --exclude .swp -e modify -r . ;
do
# find PID of the file generated by `go run .` to kill it. make sure the grep does not match other processes running on the system
IDS=$(ps ax | grep "/tmp/go-build" | grep "b001/exe/main" | grep -v "grep" | awk '{print $1}')
if [ ! -z "$IDS" ]
then
kill $IDS;
fi
go run . &
done;
ここGOの世界には2つの主要な候補がありますfresh
&glide
しかし、私はFresh
https://github.com/gravityblast/fresh