I shipped a daemon this week that does precisely one thing: it watches a directory, and when a file changes it sends a SIGHUP to another process. That's it. No flags worth mentioning, no config of its own, about forty lines once you strip the imports.
This is the size of problem Go is quietly perfect for. A single static binary, no runtime to install, fsnotify does the watching, os/signal handles the shutdown so it dies cleanly under systemd. I cross-compiled it for the little ARM box it actually runs on with one GOARCH=arm64 and copied it over. No interpreter, no dependency hell on a machine I don't want to babysit.
The honest reason I keep coming back to Go for this isn't the language, which is fine, occasionally tedious, rarely surprising. It's that the deployment story is boring in the best way. scp the binary, write a six-line unit file, done. A year from now I'll have forgotten how it works, and it'll still be running, and that's the whole point of a daemon this small.
I almost reached for a shell script and a while inotifywait loop instead. It would have worked. But shell scripts rot, and the binary won't, and I've been burned enough times by the former to spend twenty extra minutes on the latter.