10 open source projects proving the power of Go

From application virtualization to self-hosted Git services, Google Go is becoming the tool of choice for forward-thinking projects.

10 open source projects proving the power of Go
Gopher: Renee French via Wikimedia; battery: Nemo via Pixabay

10 open source projects proving the power of Go

A mere five years in the wild, Google’s Go is a language on the cusp. Lightweight and quick to compile, Go has stirred significant interest from early adopters due to its generous libraries and abstractions that make it easier to program concurrent and distributed (read: cloud) applications.

But the true measure of any language’s success is in the projects developers spawn with it. True, Go hasn’t made the dent in the developer world that Java, Python, or C/C++ have, but it’s starting to accrue a base of meaningful projects highlighting its strengths and benefits.

Here are 10 notable projects written in Go, each of which has already made a splash or is primed to do so. Many of them interrelate, either by including or building on top of each other, each leveraging Go as a language and development system in similar ways.

All the projects featured here are hosted on GitHub, so it's easy for the Go-curious to take a peak at Go code in action.

Docker

Docker

You’d have a hard time finding a better success story for Go than Docker, at least for now. In a little more than a year, this software-containerization technology has become the poster child for Go’s suitability to large-scale, distributed software projects. The Docker team liked Go because it offered a slew of benefits: static compilation with no dependencies, a strong standard library, a full development environment, and the ability to build for multiple architectures with minimal hassle.

Project: Docker
GitHub: https://github.com/docker/docker

Kubernetes

Kubernetes

If Docker is written in Go, it stands to reason that some of the most significant projects expanding on it are also written in Go. Kubernetes, Google’s orchestration project for Docker, is a Go project, along with the Docker networking project Weave and the Shipyard cluster-management system. Since building on top of Docker means facing the same technical challenges as Docker, it only makes sense to continue that project’s work using its own idioms and choice of language.

Project: Kubernetes
GitHub: https://github.com/GoogleCloudPlatform/kubernetes

Etcd and Fleet

Etcd and Fleet

CoreOS uses Docker to turn Linux into a herd of loosely coupled containers, a possible path away from the tangled skein of dependencies that has become the sine qua non of Linux package management. It’s no surprise, then, that CoreOS leverages Docker to accomplish this magic -- and that two of CoreOS’s fundamental services, etcd and fleet, are both written in Go. Fleet lets you “treat your CoreOS cluster as if it shared a single init system”; etcd, a distributed key-value store, handles the synchronization of settings between Docker applications and CoreOS instances. Both were written in Go because of Go’s “excellent cross-platform support, small binaries and a great community behind it.”

Project: Etcd and Fleet
GitHub: https://github.com/coreos/etcd

Deis

Deis

If Docker constitutes the bottom strata of a pyramid, with CoreOS as the middle level, Deis could be the capstone. It gives developers a Heroku-esque PaaS built entirely out of open source components and with a lightweight overall construction. Anything that can be put into a Docker container can be deployed, along with existing Heroku build packs if you still happen to have those lying around. The whole package is assembled out of the aforementioned pieces: Docker for the container structure and CoreOS for the OS layer, with Deis itself also written in Go (with some Python for the API server).

Project: Deis
GitHub: https://github.com/deis/deis

Flynn

Flynn

A Y Combinator-supported project, Flynn has many of the same concepts and conceits as Deis, but with subtle differences. Like Deis, Flynn can also work with Heroku buildpacks and Dockerfiles, and it's built using elements of CoreOS, although not directly on top of it. Unlike Deis, though, Flynn is built around a two-tier system architecture, with the lower tier inspired by the Google Omega project, a scalable scheduling system for compute clusters, and the upper tier designed to handle the actual deployment and maintenance. Both layers are written in Go, of course.

Project: Flynn
GitHub: https://github.com/flynn/Flynn

Lime

Lime

Many of Go’s features are a strong complement for distributed server applications, so it’s little surprise the major Go projects are server- and cloud-oriented. But desktop applications written in Go are starting to turn up, too, and Lime is a good one. It’s a re-creation of the widely used and loved Sublime Text editor -- which, for all of its positive attributes, is not open source, to the chagrin of many who work with and depend on it. Lime is still heavily prototypical, so it shouldn’t be used for production work, but with almost 10,000 stars on GitHub as of this writing and almost 800 forks, it’s making fast progress.

Project: Lime
GitHub: https://github.com/limetext/lime

Revel

Revel

One sign of real-world language traction is when developers build commonly used tools with it, such as a Web framework. Enter Revel, a “high-productivity, full-stack Web framework” written in Go. It’s outfitted with all the features you’d expect: routing, caching, parameter parsing, templating. It also sports a few features you might not expect, such as internationalization, a testing framework, and a modular design that lets developers add their own request processing systems (aka filters) to Revel without having to rip everything apart. While Revel is technically production-ready, the Revel team is still holding off on applying the all-important 1.0 moniker before a few more pieces are snapped into place.

Project: Revel
GitHub: https://github.com/revel/revel

InfluxDB

InfluxDB

InfluxDB is “distributed time series database with no external dependencies.” The term “time series” means InfluxDB is mainly concerned with taking in metrics or events, and allowing them to be analyzed in real time. “No external dependencies” means you need no other software to use InfluxDB; it’s entirely self-contained. Data can be written to or read from the database by way of REST calls that submit JSON, and queries can be made via a simple SQL language that even allows regexes. InfluxDB is highly elastic and horizontally scalable, and it’s likely Go was chosen as the language to make those features possible and easy.

Project: InfluxDB
GitHub: https://github.com/influxdb/influxdb

Syncthing

Syncthing

Syncthing could be either a desktop or server project, given that it’s theoretically useful in both contexts, but it’s tempting to call it the former for the sake of noting that Go is also useful for desktop applications.

Syncthing implements a protocol for synchronizing folders between multiple devices, à la the BitTorent Sync project. The developers’ rationale for using Go revolves around many of the language’s most praised features: simplicity, speed, concurrency, ease of deployment across architectures, and so on. Although nothing is stopping anyone else from building Syncthing clients in Python or C, the Go version is here and is clearly aimed at cross-platform use.

Project: Syncthing
GitHub: https://github.com/syncthing/syncthing

Gogs (Go Git Service)

Gogs (Go Git Service)

Ever wanted to host your own Git service, like GitHub but on your own hardware and under your own control? Gogs (Go Git Service) was written to fill that need and can do it across all major OS platforms (Linux, Windows, and Mac OS X). All that’s needed is a copy of Git, a database of some kind -- MySQL, PostgreSQL, and SQLite3 (included) are all supported -- and the binaries.

Project: Gogs (Go Git Service)
GitHub: https://github.com/gogits/gogs