So what's Go good for? According to distinguished Google Engineer Rob
Pike, the co-designer of the Go programming language, it's designed
for "big software."
Pike says Go is best for "large programs written by many developers,
growing over time to support networked services in the cloud: in
short, server software. Go enables programmers to develop software
quickly and maintain and adapt it easily as it grows. It combines the
efficiency of traditional compiled languages with the ease of use and
expressiveness of scripting languages."
Go attempts to combine the development speed of working in a dynamic
language like Python with the performance and safety of a compiled
language like C or C++. In our experiments with Go to date, typical
builds feel instantaneous; even large binaries compile in just a few
seconds. And the compiled code runs close to the speed of C. Go is
designed to let you move fast.
Google has intensive needs at two ends of the spectrum:
- the requirement for high agility and programmer productivity, of the kind that results from a modern dynamic language
- the requirement for high-performance and scalability, including the ability to exploit multi-core architectures and concurrent
Historically, a common approach to software development at Google is
to create a prototype in a high-productivity language like Python, one
where a developer can iterate rapidly through the compile-run-debug
cycle until the appropriate mix of functions and features is arrived
Once the design is considered complete, the development team then
undertakes the laborious step of re-casting their design in a
high-performance, highly scalable system: in most cases C++ (in some
cases, as in Google Wave, it is Java).
The grand experiment that Pike and colleagues have embarked upon is to
see whether these two very divergent needs can be satisfied by a
carefully designed and well crafted language.