Go is my hammer, and everything is a nail
Go as a “one hammer” language
- Many agree the post is less about Go specifically and more about the strategy of specializing in one ecosystem to reduce context switching and increase productivity.
- Several commenters say Go is “good enough” for most backend, CLI, and networking tasks, with fast compile times, simple semantics, and strong batteries-included tooling.
- Others argue that almost any general-purpose language (Java, C#, Python, Kotlin, etc.) could fill this same “hammer” role; Go just happened to be the one the author knows best.
Comparisons to other languages
- Go vs Python: Python often wins for small scripts, data science, and prototyping; Go is preferred for larger, long-lived systems, deployment as single binaries, and performance.
- Go vs Java/C#: Some see Java/C# as more expressive with richer standard libraries and better GUI stories; Go wins on simplicity, compile speed, and deployment ergonomics.
- Go vs Rust: Many see them as occupying different niches (Rust closer to C++; Go closer to Java/Node). Rust is more powerful but harder to learn and slower to iterate.
- Several note that Go’s early tooling influenced others (e.g., formatters in JS/TS, Rust), and that Go was once ahead but is now “average good” among modern ecosystems.
Language design, ergonomics, and error handling
- Supporters like Go’s constraint: minimal features, explicit code, no operator overloading, simple concurrency model (goroutines + channels), explicit error returns.
- Critics find Go verbose and unexpressive, especially for data wrangling, JSON handling, and numerical code. Repeated
if err != niland lack of higher-level collection APIs are common complaints. - There is ongoing debate around error handling as values vs exceptions; some praise Go’s clarity, others see it as C-style boilerplate.
- Generics are seen as a major improvement, but some still consider the type system primitive compared to Java/C#/Rust/TS.
Ecosystem strengths and gaps
- Strong points: standard library (HTTP, TLS, x509, net), tooling (
gocommand, gofmt, modules), culture of idiomatic, stdlib-first code, easy cross-compilation, small static binaries. - Weak points: desktop/mobile GUI (Fyne, Wails, etc. seen as immature or niche), data science/ML (no robust dataframe ecosystem), 3D/game dev and FFI-heavy, low-level systems work relative to C/Rust.
Specialization vs breadth
- Several emphasize that deep expertise in one stack pays off over years; others warn that exposure to multiple paradigms and languages broadens perspective and improves design.
- Some note a downside of knowing many languages: constant “language choice anxiety” and endless re-evaluation instead of shipping.