In keeping with the recycling theme for this issue of the magazine, this month we'll look at the Go programming language, a language that features efficient garbage collection, the identification and removal of data no longer used by a software application.
Garbage collection is boring but it is one of the reasons Go works so well with parallel processing across multiple computers each with multiple cores and all within a network. Garbage collection is really about managing computer memory, to ensure memory only holds data used by current applications. The Go language is optimized to make this trivial task reap huge benefits for the overall software application.
What Makes Go Special?
Go is a relatively new language, conceived in 2007 as a solution to software development problems Google encountered with their hardware and software infrastructure, then formally started in 2009 at Google as an open source project with significant contributions from outside the company. The language was formally released in 2012.
As with all programming languages, Go was created to solve specific problems. Here are the problems Go tries to solve:
- Computers have become fast but software development is still slow. Supposedly Go was conceived while coders waited 45 minutes for an internal Google application to compile.
- Managing dependencies in code has become very important today but older languages in the C family don't stress dependency management. This impacts the ability of software to perform quickly and efficiently across many computers.
- Many programmers find the way Java and C++ manage data types too difficult, causing them to migrate to dynamically typed languages like Python and Javascript.
- Garbage collection and parallel processing are not supported well by many programming languages.
- How to manage software processing on multicore machines is a new problem all languages must figure out.
The Go language offers more modern from scratch solutions to these issues. The creators had the benefit of a blank slate to create a language. Between the start of languages like Python and PHP in the 1990s and Go in the late 2000s, there was a complete change in the environment where software runs. Individual computers running software with small to modest networking were replaced by massive clusters of computers each with multiple cores to process software commands. And these clusters were tightly networked within data centers and across multiple data centers. In addition, web servers have become the most common way to process data.
However, while Go targets modern networked multi-core computer environments, the language is written to be similar to C, Java, Javascript, and other common procedural languages. New programmers can learn the language quickly. The problems Go solves may be new and modern but the syntax and grammar of the language is older and more familiar to coders.
Many software languages have been created as the result of research to solve mathematical problems and to understand the nature of programming languages. Instead, Go exists to make software engineering faster and more efficient. Its goals are practical.
As with any programming language, whether Go is the best or succeeds in solving these problems can be debated endlessly. Go is simply one language to consider seriously for software that requires massive parallel processing on tightly networked multi-core computers.
Go also has a mascot, a cute buck-toothed gopher designed by Renee French who designed a similar bunny for the Plan 9 software from Bell Labs. Both the Plan 9 bunny and the Go gopher look like cousins of the hilariously silly Ravin Rabbids, if you love that game.
How is Go Used?
Given the reasons the language was created, and its formal release in 2012, Go has become more common in web development projects which require lots of dependencies, lots of concurrent data processing, lots of coders, and a widely dispersed hardware and software environment. Most of these projects are internal to large corporations like Google and, therefore, not publicly available. There are a few open source projects that use Go but they're mostly to support the language, for example, godocs which powers the Go website and vitess to help scale MySQL servers to provide large web services.
Learn More
Go
http://golang.org/
http://golang.org/project/
http://tour.golang.org/#1
http://golang.org/help/
http://golang.org/doc/
http://golang.org/ref/spec
http://golang.org/doc/code.html
http://golang.org/doc/effective_go.html
http://golang.org/pkg/
http://blog.golang.org/
https://code.google.com/p/go-wiki/wiki/GoUserGroups
FAQ
Go at Google: Language Design in the Service of Software Engineering
http://talks.golang.org/2012/splash.article
Four years of Go
An Overview of the Go Programming Language in Five Examples
http://www.informit.com/articles/article.aspx?p=1714100
“My favorite programming language:” Google’s Go has some coders raving
Go: A Nice Language with an Annoying Personality
http://corte.si/posts/code/go/go-rant.html
Go Search Engine
Go Projects on Github
https://github.com/garyburd/gddo
https://code.google.com/p/go/source/browse/?repo=tools#hg%2Fcmd%2Fgodoc
https://github.com/golang/groupcache
https://github.com/youtube/vitess
Gorilla Web Toolkit
http://www.gorillatoolkit.org/
Revel Framework
http://robfig.github.io/revel/
Renee French
http://plan9.bell-labs.com/plan9/glenda.html
http://www.reneefrench.com/
Ravin Rabbids
http://rabbids.ubi.com/bwaaah/en-US/home/index.aspx