Go

Go is an open source programming environment that makes it easy to build simple, reliable, and efficient software.

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

http://golang.org/doc/faq

Go at Google: Language Design in the Service of Software Engineering

http://talks.golang.org/2012/splash.article

Four years of Go

http://blog.golang.org/4years

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

http://arstechnica.com/information-technology/2013/05/my-favorite-programming-language-googles-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-lang.cat-v.org/go-search

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

Author

  • Tim Slavin

    Tim is an award-winning writer and technologist who enjoys teaching tech to non-technical people. He has many years experience with web sites and applications in business, technical, and creative roles. He and his wife have two kids, now teenagers, who are mad about video games.

Also In The December 2013 Issue

Siblings Pete and Alexa Ingram-Cauchi Talk iD Tech and Tech Summer Camps

They talk about how they started and run iDTech summer camps together and how parents can evaluate tech summer camps.

Where to Recycle Electronics

Here are a few places where you can recycle your old electronics safely.

What is a High Level Language?

What are the differences between high level languages and machine languages? And how do these differences impact coding?

An Interview with Boone Gorges

Learn how a humanities PhD became a software programmer who builds online communities for universities, as well as Lead Developer for BuddyPress and helping to create WordPress plugins like Anthologize and Participad.

How to Make (and Keep) New Years Resolutions

A few great ideas on how to make New Year's resolution you might actually keep, and have fun doing so. Whether you like structure or hate it, here are a few approaches and a number of resources to help.

News Wire Stories for December/January

Interesting stories about computer science, software programming, and technology for the month of November 2013.

No computer has ever been designed that is ever aware of what it’s doing; but most of the time, we aren’t either.

The Hungry Camel

How many measures of grain can one camel eat while delivering grain, before the camel runs out of grain to deliver? A fun math problem at least 1,000 years old.

How to Do Online Research

Online research skills are critical for software programmers. It's how you learn any language, by searching for error messages and looking up reference material.

Comments

Almost all programming languages include the ability to add comments and other notes in your code. Here's how several languages work with comments.

Take Out the Garbage

In the same way your bedroom may be impossible to enter if you let dirty clothes pile up, computers can crash and refuse to operate if their memory is stuffed with unused data.

bin, boot, opt, and Linux File System Hierarchy Mysteries

The Linux directory structure looks confusing compared to Windows. Here are the names and purpose of each directory.

What is Localhost?

Localhost is available on most computers, usually to display web pages. It's also useful to use to learn coding on your computer.

The Paywall and Adding Voices to Help Kids Code

With this issue, you will find some articles require subscription. Here's an explanation and how you can help add writers and voices to future issues of this magazine.

Learn More Links for December 2013/January 2014

Links from the bottom of all the December 2013/January 2014 articles, collected in one place for you to print, share, or bookmark.

Interested but not ready to subscribe? Sign-up for our free monthly email newsletter with curated site content and a new issue email announcement that we send every two months.

No, thanks!