5 ms·
I wonder why Go isn't the new Java/.NET (yet?). Clearly a lot of tools and APIs have been written in it, many would describe not needing a separate runtime on
by KronisLV 3y ago
I wonder why Go isn't the new Java/.NET (yet?).
Clearly a lot of tools and APIs have been written in it, many would describe not needing a separate runtime on the target system as a big plus and the language seems simple enough to learn and utilize (with VSC support and GoLand both being good), even the typical complaints like the error handling don't seem like dealbreakers.
I wonder what's missing for Go to become a mainstay of development for the decades to come, or at least take up a huge chunk of the job market instead of being considered a niche language in some places.
- deleted 3y ago[deleted]
- gen220 3y agoI think Go is on that Java/.NET adoption curve, but it's climbing it slowly because backend programming, as a whole, is a lot bigger, mature and diverse today, than it was when Java/.NET emerged. I think there's a decent chance that, `[java.age - go.age = 15 years]` from today, Go is high up on the totem pole. From my perspective, its ecosystem is vibrant but still young – we still need to decide on the Go equivalent of Flask, Django, Spring, etc.
- guggle 3y agoThere are plenty of Flask equivalent in Go IMO. Django... not so much.
- gen220 3y agoYep! I think, at this stage, `plenty` is the point of my comment. While there are many competing and quality options (vibrant), none of them are the de facto leader (young). I think, given where we are in 2023, it'd be difficult for a Django (i.e. ORM + templates + web framework all-in-one) to emerge in Go – it's possible we never end up with one, and that's OK. [I don't think there's much stomach for good people to work on sprawling projects like that anymore – we're in an season of backend development that favors separation (vs bundling) of concerns, from my perspective]. I'm not sure if it's a unique feature of the Go ecosystem that there isn't one clear winner in the "minimalist + pluggable web framework" or "ORM" categories, or if we just need to wait for the winner to emerge. Ironically, I think the quality of `net/http` and `database/sql` might have been an anti-catalyst for the development of leading libraries in those verticals.
- guggle 3y ago> we're in an season of backend development that favors separation (vs bundling) of concerns I work in a small team (5 developers), on multiple projects that span from 3 months to 1 year of work. While I like some of Go qualities (like speed, types, low memory, easy deployment,...) it would be hard for me to introduce Go to the team. The thing is that with Django (or Laravel, or Rails, or any "opiniated" framework) I can point the team to a nice single documentation website and associated framework that covers probably 90 to 95% of our needs and gets us right into the business logic real fast. There's real value in framework integration for teams like us (and for this very reason, we don't use Flask either, way to much fiddling). Also, the feature set in these solutions, while maybe "out of season", is fine for most of our projects. At this point, should I want to push Go to the team, I would have integrate libraries myself and document... so basically starting my own version of a "framework". Like you said, it's a sprawling project. But hey... isn't it how Django started ? Maybe one day... Meanwhile, I'll stick to using Go in my personal projects, until I have a very clear picture of the ecosystem.
- coffeebeqn 3y agoYou also don’t need to have frameworks for everything when the std library delivers
- kaba0 3y agoWhy would it be the new Java/.NET? You vastly overestimate that separate runtime as being a huge positive, it is almost indifferent to most niches where these two are most common: servers, especially on the bigger side of things. For a devops team with a proper CICD pipeline, monitoring, whatnot, installing a runtime is beyond trivial, especially that many of it is container-based. So even if all else were equal, Go would need much much more positives to even start turning the wheel towards itself, momentum is huge in the industry (old Cobol systems are still clocking at places, even if they do so in a VM, as the hardware they are hardcoded against are too old now). Especially that it is not at all a net positive in many people's eyes: - it is very verbose (yes, it is in fact more verbose than Java, that had been bullied by everyone forever for being verbose..) - has terrible expressivity (java streams/.net linq) - smaller ecosystem (java is much larger than even .net, let alone go) - slow reflection (on the more enterprise-y end of the industry you sometimes need more dynamic workloads) Also add that both Java and .NET has native AOT compilation, so even that small benefit you mention may not be a dealbreaker, even if those are not as smooth a rides as go's.
- za3faran 3y agoWell said. In addition, golang seems to shun everything under the guise of "keeping things simple", so you don't see frameworks like Spring or ASP.NET. Of course pretending the issue doesn't exist doesn't make it so. At an employer, the reinvented a dependency injection + application framework, but poorly of course compared to the extremely mature offerings on the JVM and .NET, not to mention millions of dollars sank into maintaining it.
- trhhowaway232 3y agoJava DI isn't good either. It runs a full DAG on boot.
- kaba0 3y agoThere are entire second generation of “cloud-ready” frameworks for Java that does it at compile time instead.
- tmerr 3y agoMaybe the decline of desktop applications (Java, C#) and Android (Java)? And then Go coming out with some killer frameworks? I have to stretch my imagination to imagine anything causing Go to outpace C# or Javas ecosystem.
- AtNightWeCode 3y agoGo ecosystem is like a fraction of what .NET/Java is. Both in quality and size. Dart for instance is a better lang. It is also from Google. It also compiles to binaries. Why is that not the new... The slim spot for Go is the devops tools space. Where Go may or may not survive. Considering the march of Rust.
- slantedview 3y ago> I wonder why Go isn't the new Java/.NET (yet?). Go is moving too slowly (ex: most of the SDK still doesn't support generics). Meanwhile, Java is moving relatively quickly, as are new contenders like Rust.
- coffeebeqn 3y agoMoving towards what? I use it to build services that can serve lots of requests, I don’t need the language to be moving fast underneath me
- shakow 3y ago> Moving towards what? Toward a better stdlib? E.g. we had to wait years to get Min/Max.
- coffeebeqn 3y agoI think the stdlib is pretty good! Was anyone really waiting for min/max?
- slantedview 3y agoThe SDK is where most movement is needed.
- booleandilemma 3y agoGo is moving slowly, or trying not to move at all, on purpose, and I have to say, as a C# developer having to constantly learn new syntax, it seems refreshing. At the rate it's adding new syntax, C# may fall apart under its own weight and become the next C++.
- kaba0 3y agoBut Go started at Java 1.1 levels, for no good reason. If you want a language with a conservative growth, Java is your choice.
- trhhowaway232 3y agoGo is spreading like wildfire in microservice and devops space and Rust is following closely behind. It's over.
- pjmlp 3y agoBecause the overal experience is lacking in language features, tooling and ecosystem.
- seanmcdirmid 3y agoGo is popular in dev ops right? It could theoretically languish there for a while, like Python did, before becoming popular for other things.
- liampulles 3y agoI was a Java dev full time and went to full time Go dev. I think a lot of it boils down to wide employment opportunities with Java. Some people also like the idea of creating OO package private final monstrosities.
- invalidname 3y agoBecause it's very literally decades behind Java on almost every front. It was designed for system programming whereas Java is an enterprise platform. On observability Java stands alone. Far beyond anything else (including .net). E.g. check out OpenTelemetry to get a sense of how far ahead Java is on that front. It does all of that without impacting performance in a significant way. In terms of 3rd party tools. NPM has more packages but they are simplistic toys for the most part. Java has a fantastic number of packages to solve every niche problem you can think of. These packages are at a maturity level that no one can compete with. Hibernate is so far ahead in the ORM field that there's no point comparing it to anything else... The same can be said for Spring, it is massive. In a bad way as well... But that mass is without competition. You need to integrate with something, there's already someone who built that and it probably works with Spring. Then there's scale... Horizontal and vertical scaling and the set of tooling to measure that it works properly. The question isn't why don't people switch to go, the question is why does anyone use Go to begin with? To a large part it's a combination of ignorance about Java due to the vast amount of stuff that's already out there. A hostility towards the language which is redundant since there's Kotlin, Scala, etc. or problems with Oracle which is something I actually get... I use OpenJDK but Oracle does loom. Go feels like a toy. If I were to build a system level solution I would use Rust which seems superior in every way. For high level stuff the JVM is without competition.