Does the world really need another C-ish programming language? Apparently Google thought so in 2009, when it channeled the Ramones and introduced Go. Now the Go team has reached a stable point they’re calling Go 1 and sending it out into the world for “creating reliable products, projects and publications.” Now, what’s the world going to do with it?
Stepping back a second, what is Go, and why did Google decide to introduce it? As the Go FAQ says, it’d been more than a decade since a “major systems language” had been introduced.
But the computing landscape had changed quite a bit in that time. Folks at Google were frustrated with existing languages, and had to choose between “efficient compilation, efficient execution or ease of programming.” None of the mainstream languages like C, C++, Java, Python, etc. offered everything that Google wanted.
So Google engineers started working on Go in 2007. The FAQ says that Go is “mostly in the C family” for basic syntax, but takes “significant input” from the Pascal family, plus ideas from other languages. But, developers should approach it as an entirely new language designed “by thinking about what programmers do and how to make programming, at least the kind of programming we do, more effective, which means more fun.”
Go Is Good For…?
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.” (Being a member of the original Bell Labs Unix team, Pike does know a thing or three about systems software.)
But it may be good for other types of software as well. For example, I asked around on Google+ about users of Go, and got a response from Douglas Fils, who’s been experimenting with all manner of languages.
Fils says that he’s been writing Web-based apps for “some time now” and mostly in the Java Virtual Machine (JVM) world. “So of course that means Java for most of that. Recently I started to do more in languages like Scala and Groovy. I’ve started doing quite a bit in Groovy actually and just completed a big project in Groovy/Grails. I’ve also looked and done some stuff in Ruby on Rails Python (and Python frameworks).”
He says he started a Web-based interface to data resources with an early version of Go. Unfortunately, “the packages and syntax were in such flux at the time it made life difficult. I had also looked at node.js and so in January I moved the entire effort to node.js.”
When the Go syntax and packages started to stabilize leading up to the Go 1 release, he decided to revisit Go and rewrite the application. This time, he recalled why he started with Go in the first place.
Arguments for Go
Fils says that the level of “boiler plate required in Java” is cumbersome. He says it’s better in Scala and Groovy, but still an issue.
Go “feels” like a dynamically typed language, says Fils, but Go provides static typing that is “not heavy like Java.”
The garbage collection in Go, is “much better than the JVM.” Says Fils, “I don’t have nearly the issues with memory in Go as I do in the JVM. Especially when compared to a dynamic language like Groovy.”
Speed comes up several times in Fils’ comments about Go. It’s fast and doesn’t “pull down under loads.” It takes very little time to compile, letting him edit his program and compile “as fast as a dynamic language.”
Finally, he says it’s much more enjoyable than working with things like Node.js, Java or Java-based languages or Ruby on Rails. “With JVM-based apps I feel like I am always becoming a system administrator, not a developer. I’m modifying heap spaces, working on load-balancing or memory issues or other resource management. With Go I’m not running into that. I develop, compile, test, run, deploy and enjoy.”
Note, not everyone is in love with Go. Consider Shaneal Manek’s comments about Go’s garbage collection and attempts to take on scripting and compiled languages.
Can Go Go Mainstream?
Which is what you’d expect. As RedMonk’s Stephen O’Grady says, it’s “very much early days for Go. Generally, developers seem to fall into one of two camps: It’s either a welcome cross between lower-level languages and interpreted/garbage-collected alternatives, or it’s an abomination. The latter, unsurprisingly, tends to be strong C advocates.”
It’s not at all surprising there are strong opinions around Go – or any programming language, for that matter. What is surprising is how much traction Go seems to have achieved in that time. O’Grady ranked Go in the second tier of programming languages in the RedMonk Programming Languages Rankings in February. But, he says that given how young Go is, “even that traction is a bit surprising and somewhat impressive.”
Now that Google has released a stable version, and is deploying support on Google App Engine, it’s likely to gain even more traction.
Whether Go will become a “mainstream” language, though, will take some time to determine. It seems to have a fair amount of interest outside of Google, including over at Engine Yard and other companies. Developers who aren’t quite satisfied with languages they’re using today might want to take a look at Go.
If you’ve been using Go or have toyed with it previously, be aware that Go 1 introduces a few changes to the language. However, from now on programs written to the Go 1 specification should work over the lifetime of the specification. According to the Go developers, “at some indefinite point, a Go 2 specification may arise, but until that time, Go programs that work today should continue to work even as future “point” releases of Go 1 arise (Go 1.1, Go 1.2, etc.).”
Have you worked with Go on any projects? Let us know what you think about Go, and whether it has a future.