Meanwhile: Golang neatly fills in a sweet spot just "below" Python and Ruby, where finer-grained control of memory and more predictable performance characteristics are required, but bare-metal performance isn't. That sweet spot actually describes a huge fraction of all the use cases for C/C++ in Internet software.
So this is a meme I'd like to see die. It somehow manages to simultaneously get Golang, Java, and C++ wrong all at the same time. The only way to make it worse would be to work in some kind of Lisp comparison, based on Golang's parsimony with parenthesis.
Golang is the new Java, you are watching it being born. Its not ready for the corporate world, its not on any large organisations radar (apart from its creator for course). The point is that Golang solves the problems of the future, it offer parallel execution to normal programmers.
In the future banks and large companies are going to stop having data centres of their own, CPU's are going to have 32+ cores. Java does not solve those problems natively.
Java is great, its got 40+ years of life left in it, but don't say that Java is strong because of its ecosystem. Ecosystems change from decade to decade.
Anyone who thinks Go will ever be a replacement for Java is frankly clueless about enterprise software development. Go has almost non-existant integration with enterprise systems e.g. SAP, Hadoop. It lacks operational management capabilities e.g. JMX. And seriously the range of libraries on the JVM covers pretty much everything e.g. banking/finance use cases.
And concerningly there is not a single reasonably sized Go project to get an understanding of how it works with 20, 50, 100 or 500+ developers working on the same codebase.
----------------------------------------------------------
Language files blank comment code
----------------------------------------------------------
Go 750 14601 9901 115877
CSS 8 107 194 10010
HTML 11 362 21 3594
Bourne Shell 28 391 323 2044
Bourne Again Shell 25 249 185 1475
Javascript 12 111 48 756
Python 1 23 24 192
C 1 20 19 179
YAML 4 25 13 162
XML 1 6 2 60
make 2 27 5 60
Perl 1 11 37 29
vim script 2 8 3 13
----------------------------------------------------------
SUM: 846 15941 10775 134451
----------------------------------------------------------
And I believe there are a number of projects internally within Google but they tend not to talk about internal product technologies (at least at how large they are).Most people simply don't have an understanding of enterprise applications. The majority of the apps are single codebase, Servlet/Spring type monstrosities. They are 10+ years old and have had hundreds of contract developers who come in, add a few new features and then go onto the next contract.
And my point is that I am yet to see what Go would be like in these situations.
It happened to every language without exception.
Anyone who has ever worked in enterprise software can tell you, Go is (currently) exceptionally poorly suited for that style of development. I don't think that is an accident though. I think there is at least the implication that enterprise software development models and architectures are flawed at the core. Go seems to be designed from the start to prevent you from developing that way.
I may be reading more into the Go culture than I should, and I certainly don't think that there is proof that enterprise software can't be successful, but Go clearly steers you into building small, self contained servers that do one thing well and can go without change for a long time.
I'm not sure if I misunderstood your statement, but Go has Docker, CoreOS and numerous other projects which have more than 20 developers working on the same codebase.
Take for example eBay or Amazon and the huge array of different use cases they support. Those are the typical sized Java applications we are talking about. Insurance, Banking, Finance etc. Legacy integration, payments, reporting, various web front ends. One codebase.
Also, OT, didn't realize Eucalyptus had worked so much towards friendly development, and was moving towards including RiakCS as a S3 work-a-like backend[2].
[1] https://github.com/eucalyptus/eucalyptus [2] https://github.com/eucalyptus/eucalyptus/wiki/Scalable-Walru...
[edit: yes, I realize you were probably talking about Amazon the shopping cart, not Amazon the IT infrastructure provider]
I don't see any web technology Go could replace. Not even dynamically typed langauges.
We could easily have done so in Java, but we'd be in Java's concurrency model, which is much more difficult to reason about.
I think this is exactly what people mean when they say Go is more of a replacement for Java than it is a replacement for C++: In the sense that when Ruby and Python become too slow, people normally reach for Java, but now they have Go as an alternative option, with a better concurrency model than Java's.
Better language? Not really, if you want types TypeScript is a much better option. With node+typescript+react you can get end-to-end typechecked code with no FFI involved - thats really, really cool.
Better concurrency? Oh yeah, definitely. Better core libraries? Yes, by far.
Better package ecosystem and management? Definitely not.
> Better language? Not really,
There is no conceivable universe in which the expression "JavaScript is a better language than Go" evaluates to true. ~$ node
> "JavaScript is a better language than Go" ? true : false
true
> "JavaScript" > "Go"
trueWe can argue that the Go concurrency model is better.I think nodejs's is good enough,easier to understand and to deploy. If your goal is to write lightweight webservers that do a specific task,nothing beats node in my opinion.
Ehm, really? Tree of javascript, possibly with some compiled libraries easier to deploy than a static binary?
I'm not saying node is hard to deploy, but I think maybe I'm misunderstanding what you mean here?