coder
Newbie
Moderator

Why do so many people say Go isn't suitable for complex business applications?

First off, I'm not here to start a flame war—I'm past that stage. But in almost every thread comparing Go and Java, someone claims Go isn't suited for complex business logic while Java is. I've worked on numerous complex projects using C++, Java enterprise development, and Go enterprise development. Once you're familiar with both Java and Go, they're pretty comparable. I don't feel Go is unsuitable for complex business scenarios at all. In fact, Go projects tend to be easier to review. I wonder if it's because Go lacks generics. But looking back at my own code, I haven't used generics in business logic—it's more in the base framework where interface{} is used in a few places, though that's not really an issue. So what kind of complex business scenarios are people referring to?


qipa
Newbie
1#


Ever since running my first line of Go code in production, I've found it hard to engage in serious engineering debates with “developers of other languages.”

It's not that their languages are inadequate. Node.js offers hot reloading and a thriving ecosystem; Java delivers impressive throughput and mature middleware; Rust is sharp enough to command respect. But when the conversation turns to predictable delivery, stable latency, and a simple yet reliable concurrency model, I can't help but recall the clean, static single-file output of `go build`, the thousands of goroutines silently shuttling through the scheduler, and the reassuring sense of the standard library quietly handling 80% of the work.

While they passionately debate the agility of “hot deployment” and “scaffolding,” I just shrug: a few seconds of compilation yields a monolithic binary deployed in one go—cross-platform, replicable, zero external dependencies, just toss it into a container and it runs. While they argued fiercely over the “coroutine model,” I thought of goroutine + channel's CSP semantics—not masking blocking as asynchronous, but making concurrency predictable communication again. When they praised a runtime's “controllable memory strategy,” I cared more about escape analysis and the evolution curve of low-latency GC, and that moment when a pprof flame graph nailed the p99.

I tried to fit in. But while they were busy assembling layer upon layer of frameworks and scaffolding, I'd already spun up a service with net/http, integrated timeouts and cancellations with context, and swept through potential hazards with go test and race detector. While they marvel at “vast ecosystems and countless wheels,” I simply say: the standard library should cover 80% of scenarios. For the remaining 20%, a small, elegant module with stable APIs pulled via `go get` suffices—fewer components mean easier maintenance and more reliable deployment.

This isn't arrogance, but restraint born of experience. When you personally compile a service from the main function to production, pack logging, metrics, tracing, and rate limiting/circuit breaking into a single image under 100MB, and observe, roll out, roll back, and scale horizontally with complete predictability—you'll understand: engineering peace of mind comes from simplicity, restraint, and certainty, not flashy syntax or complex magic.

Go is certainly not a silver bullet. But once you've grown accustomed to writing concurrency like sequential code, deploying by copying files, and confronting performance issues head-on with flame graphs—it's hard to go back.

So I politely say, “Any tech stack is fine.”

Yet deep down, that voice remains calm and resolute:

“Sorry, you haven't experienced engineering simplicity and certainty yet.”



see
Newbie
2#

Let's set aside the language debate for web development. Go remains a relatively young language. When it was first released, it lacked a dedicated library management system, instead relying on the GOPATH approach where all projects had to reside under the GOPATH directory. The official library management system for Go was only introduced experimentally in Go 1.11 in 2018. Go modules adhere to the Semantic Versioning 2.0.0 specification.

module github.com/panicthis/modfile/v2


Various factors have prevented Go's third-party component libraries from truly flourishing.

In contrast, Java, PHP, and Python not only boast extensive open-source component libraries but also offer numerous open-source projects for reference. Java's mature SpringBot and SpringCloud frameworks have greatly benefited outsourcing companies in development. PHP's WordPress, DedeCMS, and Discuz forums enabled countless non-technical webmasters to earn money back in the day. Python, needless to say, is riding high with machine learning being in its prime.

Node.js boasts a highly developed open-source community with numerous ES dialects. Remarkably, when configured properly, they can coexist seamlessly. Its open-source component libraries have flourished to the point where even three lines of code can create a viral library.

Domestically, Golang practitioners reportedly account for over 60% of the global total. However, most remain in an adaptation phase after switching from other languages, lacking standards and leadership to establish them. Take web backend development as an example—development efficiency struggles to compete with PHP.

Golang boasts many advantages, attracting practitioners from other languages to switch roles. Correspondingly, this makes training newcomers challenging, likely requiring several more years of transition.

Login
{{error.username}}
{{error.password}}
or
Register
{{error.username}}
{{error.nickname}}
{{error.email}}
{{error.password}}
{{error.repassword}}
Forget the password
{{error.email}}
{{error.code}}
Reply:{{reply.touser}}
Edit
Allow cookies on this browser?

All cookies currently used by FreeTalkHub are strictly necessary. Our cookies are employed for login authentication purposes and utilise Google's one-click login functionality, serving no other purpose.