Ответ 1
Друг написал простой компилятор Daemon для go, работал как шарм для моих собственных небольших сетевых/http-проектов.
Здесь вы можете найти репозиторий: https://github.com/githubnemo/CompileDaemon
Я знаю, что AppEngine делает это, но я не кодирую его.
Я попытался использовать Guard
из мира Ruby, чтобы прослушать изменения на .go
файлах и выполнить следующие команды:
killall foo
go build -race
./foo &
Но он никогда не посылает foo
в фон, он просто висит бесконечно.
Как вы решаете эту проблему? Решение также должно быть кросс-платформенным (GNU/Linux и Mac).
Друг написал простой компилятор Daemon для go, работал как шарм для моих собственных небольших сетевых/http-проектов.
Здесь вы можете найти репозиторий: https://github.com/githubnemo/CompileDaemon
Вы также можете попробовать Джин от Codegangsta. Это огонь и забыть.
https://github.com/codegangsta/gin
ОБНОВЛЕНИЕ: Я предпочитаю CompileDaemon в настоящее время. Джин иногда не принимает запросы
Недавно я обнаружил рефлекторный инструмент. Это быстро и работает как шарм. Он очень похож на nodemon (из мира nodejs) и охранник (из рубинового мира).
В большинстве случаев я использую его, как показано ниже:
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
Существует также опция конфигурации, в которой вы можете указать несколько команд, которые вы запускаете в то же время, но я действительно не использую их.
Вы можете использовать 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 работал.
Но это намного лучше, чем любой другой инструмент, который я использовал до сих пор, который идет конкретно.
если кто-то все еще ищет решение, я написал несколько сценариев оболочки, чтобы сделать это, и его можно использовать через среду докера, репозитории на https://github.com/zephinzer/golang-dev
В мире GO есть 2 главных претендента fresh
& glide
Но я пойду с Fresh
https://github.com/gravityblast/fresh