We (https://commando.io) are seriously considering switching to Go for all of our SSH connections. The built in concurrency, bundled with great websocket support, and SSH officially supported as a library (https://godoc.org/code.google.com/p/go.crypto/ssh) all make it a perfect candidate.
The only thing I can think of: net/http doesn't hide details but instead allows you to supply your own socket from which to accept connections, which in turns makes it possible to implement zero-downtime restarts with the help of packages such as goagain.
Why is that every large company at-last rewrites their codebase in statically typed language. This makes the newcomers confuse which language one should learn seeing their inspiration change their official language. Is the fate of scripting languages are same in every aspect of programming? Are they really only suitable for rapid prototyping?
If there are people out there who are trying to choose a single language to learn, comments like yours should be a wakeup call to them:
Different situations and tasks call for different tools. Excelling in a modern development environment means being able to work with a variety of tools and being able to identify which tasks require which.
Static typing is an additional contract on the behavior of the code, similar to unit tests but built into the language itself and therefore cheaper to write. The overhead of specifying types slows you down during initial coding, but the code that results is more reliable and easier to read and maintain.
In environments where initial coding speed matters more than long term efficiency dynamic typing is preferable. Prototyping, mvp's, these are things that fit well into a loosely typed language. When that MVP grows into a business however, eventually it becomes benefecial to switch to static typing. Performance of a feature is usually the leverage that makes it happen, but the reduced cost of maintenance is what makes it stick.
So, both choices can be right for the same team at different stages of the product lifecycle.
What is interesting about Scala, go and rust is that they try to reduce the coding cost of static typing as much as possible (compared to Java, c and c++), giving the benefits without costing as much up front.
Performance is only one of many factors in deciding on a language.
Here are some other reasons that occur to me (YMMV):
* A language that is great for performance might not lend itself equally well to experimentation or initial implementation (not saying this is the case for Golang, but in my opinion it probably is for other performance-focused languages like C++).
* You as a developer might have more expertise in a dynamic language.
* The initial development language might have superior OSS libraries which allow you to get to a working application quicker (later you can replace them with your own implementations when you do the rewrite)
* Things change. Golang might have been a terrible choice when Digital Ocean was starting up. Golang is definitely reaching a tipping point as a language, but it might have become a dead-end like many other promising languages and where would you be then?
Which is true for a certain metric. If you just count in terms of amount of text that needs to be written, scripting languages win (in the prototyping phase).
Scripting languages are really good for fast prototyping which helps in reducing the time to market which is critical for startups. When they go big, usually their codebase also goes bigger. Then they will start looking into maintainability, performance and 'ability to refactor' aspect of codebase. Statically typed language shines here and hence the move.
Are there any recent Go books that HN would recommend? Everything I see is from 2012 but I'd really like something from 2014 simply because I presume as an uninitiate that the platform is moving quickly.
The documentation on the Go site is really good. You don't need much more than that. The early access book from Manning is really good so far (http://www.manning.com/ketelsen/) but it's only a few chapters finished. After that I find myself reading the source for the code in the standard lib which is well written and relatively easy to follow.
On the surface, that sounds reasonable. However, the Go platform has been very stable since 2012. Since Go documentation is standardized, learning how to write the language and use a few simple libraries (which a book from 2012 should do) should enable you to work with anything thrown your way.