Go, a Google-developed open source language intended to focus on simplicity and efficiency, has been getting a lot of attention lately. Launched late in 2009, the statically typed language is perhaps best known for its use in the development of the red-hot Docker container platform. "Go was born out of frustration with existing languages and environments for systems programming," a FAQ on Go reads.
Like any technology, though, it has its adherents and critics. Here are some key benefits and perceived drawbacks of the language as told by experts familiar with it.
Pro: Fast and friendly
It's easy to install applications written in Go, and it's easy to write them, says Go developer Steve Francia, chief of operations of the Docker open source project and creator of Hugo, a website engine written in Go. The language also has the edge when it comes to compilation. "C and C++ and Java take a long time to compile, [but Go] is very quick," said Francia, noting that Go applications are compiled to a single executable, whereas languages like Ruby, PHP, and C++ have a lot of dependency libraries that have to be installed alongside the application. Besides speed, Go also boasts a simple, small language syntax -- developers could read the entire Go specification within two hours and understand it, Francia says.
Pro: Concurrency benefits
"It has concurrency built into it as a language, which makes it nice that it can advantage of multicore processors out of the box," Francia says. As Web developer Will Yager, who has been a critic of Go, avers, "Go's concurrency support is fairly solid, and its built-in channel abstraction works fairly well."
Pro: Google backing and strong growth
The best reason to use Go, Yager says: "It has the financial support of one of the world's largest software corporations" in Google. This means Go has a solid standard library and good cross-platform support, but Yager is skeptical of how long Google will remain committed to it.
The language is growing at a phenomenal rate, adding user groups and conferences dedicated to it around the globe, says Go contributor and blogger Dave Cheney. "Go attracts its fair share of critics, but I think the numbers speak for themselves. There are a growing number of professional programmers who see the value in a language that just lets them get things done."
Pro: It's multiplatform and portable
Go runs nearly everywhere, says Francia. "It's very easy to run it on Windows or Linux or OS X or even things like Raspberry Pi."
Andrew Gerrand, a participant in the Go project and an engineer at Google, says "portability has been an important consideration from the very beginnings of the Go project. We launched supporting two operating systems and three processor architectures, and effortless cross-compilation is a product of our emphasis on portability." Cross-compilation capabilities, meanwhile, have had Go offering "excellent" support for producing binaries for foreign platforms, where Go does not have to be installed on the target, Cheney says. "When Go 1.5 ships in August any Go programmer will be able to cross compile their program without having to go through a fussy setup phase," he writes.
Because of the heritage of its compilers, which were based on the Plan 9 tool chain, Go has always had a straightforward model for using a compiler, for example, on a Mac, to produce a binary running on Windows or Linux, Cheney says. Go's "easy cross-compilation" will enable developers to ship binaries for ARM64 and PowerPC64 platforms "with a minimum of fuss," when planned support for these platforms is ready, concurs Gerrand. "In fact, with the entire tool chain recently converted to Go, we now have much less platform-specific code in our core distribution, which makes it easier than ever to port Go to new operating systems and processor architectures."
Con: Very young language, very young ecosystem
As Francia points out, Go is still a very young language. "I'm shocked how far it's come and how short it's been established, but the reality is, this a very young language with a very young ecosystem around it." This means there aren't many libraries for it yet, leaving developers to write libraries themselves. While languages like Python and Java have great libraries for natural language processing, for example, Go is lacking in this regard. "Another shortcoming of Go," Francia adds, "is that in spite of good effort from the people and [being] an easy language to learn, there's not a lot of learning resources yet for Go." This includes a shortage of books and online courses on the language.
Con: Simple to the point of being superficial
"Go's main marketing claim is that it is simple," Yager says. "Unfortunately, Go's simplicity is mostly superficial, and in its effort to find simplicity, it threw away decades of valuable programming language progress." He believes that much of Go's support is derived from a desire to return to purportedly simpler days of programming. "A common sentiment among Go supporters is that modern languages are too complicated and 'academic', whereas they see Go as a 'working man's' language."
It's easy to crank out Go code, while many modern languages force programmers to front-load the design aspect of a program, which is mistaken for a loss of productivity, according to Yager. "In reality, the increased up-front design cost of modern languages, like Rust, Haskell, Scala, and so on, translates to a decreased overall cost -- with less time spent reimplementing and debugging. But the immediate gratification afforded by a 'simple' language like Go is hard to ignore."
Go claims to follow the tradition of C but actually abandons almost everything that made C elegant, Yager believes. "C requires no runtime and is portable across all Von Neumann computers, while Go requires a complicated runtime, a heap, and an operating system."