I didn’t pick Go because it was trendy. I picked it because I was tired.

Tired of dependency hell. Tired of 200MB Docker images for a script that checks if a port is open. Tired of reading framework docs longer than the code I wanted to write.

Go gave me something I didn’t know I needed: permission to be simple.

One binary. Cross-compile it. Ship it. Done. No runtime, no virtualenv, no “works on my machine.” It just runs.

I build CLI tools — small, sharp utilities that do one thing well. portcheck tells you if a port is open. jsonpretty makes JSON readable. envdiff compares environment files. None of them need a README longer than a tweet.

Go makes that kind of work fun. The standard library is massive. net/http is production-ready out of the box. Error handling is explicit — annoying at first, then you realize it saved you from three silent bugs you would’ve shipped in Python.

And goroutines? I wrote a concurrent HTTP prober in like 40 lines. Try doing that cleanly in most languages.

Is Go perfect? Nah. Generics came late. The error handling verbosity is real. And sometimes I miss a good map/filter/reduce chain.

But every time I go build and get a single binary I can scp to a server and run — no questions asked — I remember why I’m here.

Go doesn’t try to be everything. That’s exactly why it works for me.