People frequently ask why Go does things a certain way, and the answer is that the decisions seem odd without context.
So the next question is, what is this context and where did it come from?
The most obvious is the article by Rob Pike “Language Design in the Service of Software Engineering” (2012).
But we can learn more. Go came from the software engineering practices at Google. So what are those like? Titus Winters gave two talks at CppCon:
- The Philosophy of Google’s C++ Code (2014)
- Lessons in Sustainability: How to Maintain a C++ Codebase for Decades (2015)
And from Carmen Andoh, another look into the technical and cultural pressures that influenced Go: The Why of Go (2017)
Finally, we can see the influence of experience on Rob Pike’s way of programming through his writing. There are glimpses of proto-Go scattered throughout “The Practice of Programming” (1999).
The effects of “designing for scale” are visible not only in the original draft of the language, but in both the proposals for type aliases and vgo. Both of these are solutions to problems that might arise in smaller projects, but are much more difficult to tackle in the context of Go’s scale at Google.