Watcher is a command line tool inspired by fresh and used for watching .go file changes, and restarting the app in case of an update/delete/add operation.
Most of the existing file watchers have a configuration burden, and even though Go has a really short build time, this configuration burden makes your binaries really hard to run right away. With Watcher, we aimed simplicity in configuration, and tried to make it as simple as possible.
Get the package with:
go get github.com/canthefason/go-watcher
Install the binary under go/bin folder:
go install github.com/canthefason/go-watcher/cmd/watcher
After this step, please make sure that your go/bin folder is appended to PATH environment variable.
cd /path/to/myapp
Start watcher:
watcher
Watcher works like your native package binary. You can pass all your existing package arguments to the Watcher, which really lowers the learning curve of the package, and makes it practical.
myapp -c config -p 7000 -h localhost
watcher -c config -p 7000 -h localhost
As you can see nothing changed between these two calls. When you run the command, Watcher starts watching folders recursively, starting from the current working directory. It only watches .go and .tmpl files and ignores hidden folders and _test.go files.
By default Watcher recursively watches all files/folders under working directory. If you prefer to use it like go run
, you can call watcher with -run flag anywhere you want (we assume that your GOPATH is properly set).
watcher -c config -run github.com/username/somerootpackagename
For the cases where your main function is in another directory other than the dependant package, you can do this by passing a different package name to -watch parameter.
watcher -c config -run github.com/username/somerootpackagename -watch github.com/username
Since Globs and some optional folder arrays will make it harder to configure, we are not planning to have support for a configurable watched folder structure. Only configuration we have here is, by default we have excluded vendor/ folder from watched directories. If your intention is making some changes in place, you can set -watch-vendor flag as "true", and start watching vendor directory.
I have forked the original go-watcher as development seems to have ceased on it. They had a nice idea of packaging gvm with the docker images, but this resulted in some really big images and also meant it was limited by what gvm versions they had installed.
I thought about doing the same but I wanted much smaller images, so instead I'll package it with a tag per go version, this means if you want a version of go you'd do theflyingcodr/go-watcher:goversion
. At the moment only 1.15.8 is supported.
If you want to run Watcher in a containerized local environment, you can achieve this by using theflyingcodr/go-watcher image in Docker Hub. There is an example project under /docker-example directoy. Let's try to dockerize this example code first.
In our example, we are creating a server that listens to port 7000 and responds to all clients with "watcher is running" string. The most essential thing to run your code in Docker is, mounting your project volume to a container. In the containerized Watcher, our GOPATH is set to /go directory by default, so you need to mount your project to this GOPATH.
docker run -v /path/to/hello:/go/src/hello -p 7000:7000 theflyingcodr/go-watcher watcher -run hello
To provide a more structured repo, we also integrated a docker-compose manifest file. That file already handles volume mounting operation that and exposes the port to the localhost. With docker-compose the only thing that you need to do from the root, invoking `docker-compose up
On Mac OS X, when you make a tls connection, you can get a message like: x509: certificate signed by unknown authority
You can resolve this problem by setting CGO_ENABLED=0 golang/go#14514 https://codereview.appspot.com/22020045
The MIT License (MIT) - see LICENSE.md for more details