在文件更改时自动重新编译和重新加载服务器

问题描述 投票:8回答:5

我知道AppEngine会这样做,但我不是为它编码。

我尝试使用Ruby世界中的Guard来监听.go文件的变化,并执行以下命令:

killall foo
go build -race
./foo &

但它永远不会将foo发送到后台,它只是无限期地挂起。

你们是怎么解决这个问题的?解决方案也必须是跨平台的(GNU / Linux和Mac)。

go guard
5个回答
19
投票

一位朋友写了一个简单的Compile Daemon for go,就像我自己的小网/ http项目的魅力一样。

您可以在这里找到存储库:https://github.com/githubnemo/CompileDaemon


10
投票

您还可以通过Codegangsta试用Gin。这是火和忘记。

https://github.com/codegangsta/gin

编辑:我现在更喜欢CompileDaemon。杜松子酒有时不接受请求


4
投票

我最近发现了一个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

还有一个配置选项,您可以在其中指定同时运行的多个命令,但我并不真正使用它。


0
投票

如果有人仍在寻找解决方案,我写了一些shell脚本来做这个,它可以通过docker环境使用,https://github.com/zephinzer/golang-dev的回购


0
投票

你可以使用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才能工作。 但它远比我迄今使用的任何其他工具要好得多。

© www.soinside.com 2019 - 2024. All rights reserved.