Now they just call it a general purpose language.
It's not a web language per se but it's great for building web applications:
- Compiled, performant
- Elegant concurrency model
- Bridges the gap between dynamic and static typing (it's statically typed but with ideas borrowed from dynamic languages)
Unlike Java, it's pleasant to work with.
Unlike Ruby/Python, it's very fast.
I've seen some python setups where you have 3 separate servers: one for serving static media (usually written in C), one for serving the main app (python), and one for providing websockets (node.js).
With Go, you don't need this convoluted setup. You can do all of these things from within Go.
Here's an example chat app that uses websockets:
http://theplant.jp/en/blogs/10-techforce-building-a-web-chat...
The bottleneck in almost any real web app is going to be the database, not the programming language.
If you can't scale horizontally then your language choice is not your problem. If you can then what performance metric is going to show the inadequacy of Ruby or Python running on a few servers?
Add the caching that you should be doing anyway and even slower Ruby/PHP/Python frameworks can perform quite adequately.
I don't dispute that Go is a cool language but this seems like FUD.
- fun to work in.
- efficient - performance approaching C for CPU-intensive tasks,
- designed for modern hardware (multicore, networks),
- aimed at software such as web servers,
- ... but turned out to be a great general-purpose language.
(Never mind that "web language" ain't exactly a great term, either. I'd apply that to some integrated language like Opa, but most languages commonly used for web programming aren't restricted to that and do enjoy some common use outside of that area.)
So no really narrow sweet spot. A good language for general network programming, which might include some framework web stuff, but also could involve writing your own custom servers and consumers.
There's probably a better language for each individual task, but go is quite solid at a wide spectrum of tasks. Good community, too, if a bit fanboyish.
I'd just except the very end of low level stuff from it, mostly due to maturity and GC issues, so it wouldn't be my choice of language for a embedded real-time situation. If you're talking web server/3D game low-level, it's fine.
To me, go looks like C programmers copied Modula-3, whereas Java was Cobol programmers copying Modula-3...