My Objectives

My company JoshSoftware, based in Pune India, sponsored my trip to the first-ever Go programming conference – GopherCon in Denver, CO, USA from April 23-26, 2014.



Yours truly at the conference Yours truly at the conference

JoshSoftware is now Diving into Go and as such, there were some clear objectives for my visit to this conference –

Get more insights into Go.

See what interesting projects people from across the globe are working on.

Network with other gophers.

Talk to the organizers and the Go team for help in organizing a Go conference in India.

Pre-GopherCon party

On 23rd evening we had the Pre-GopherCon party organized by the Denver Gophers group. This was a great way to meet a lot of gophers (over 300 gophers attended this party) and hear about the interesting projects people are working on. There was excellent (free) beer from local Denver breweries and an excellent lineup of lightning talks. Both the workspace / bar of Galvanize that hosted us and the lightning talk room were packed to capacity. Many thanks to Cory LaNou and Levi Cook, whom I met there for the first time, for organizing this.

GopherCon 2014

The next day i.e. 24th April was history in the making and the 700+ participants felt like they were part of something special. The venue (Denver’s Downtown Marriott conference center) was superb; excellent food and some great after-hours activities.

The Opening Day Keynote was from Rob Pike of Google Inc.

Some highlights from his talk:

We “started with C” but Go is profoundly different.

Go’s import is implemented by the compiler (as opposed to a text processor).

is implemented by the compiler (as opposed to a text processor). It is a profound mistake to have language semantics depend on invisible characters – Rob Pike on whitespace delimited blocks.

Errors are not special. They’re just values. You have the full power of the language at your disposal to work with them.

are not special. They’re just values. You have the full power of the language at your disposal to work with them. Go was designed to be the language for cloud infrastructure (back then we used to call it servers, now they call it cloud infrastructure!)

The entire day of 24th and 25th April was lined-up with great talks. Topics ranged from introductory discussions of the core language to experimental and exploratory topics. I learned a lot from every talk. The GopherCon 2014 slides and talks are being posted by speakers here. The presentation videos can be seen here.

Some Highlights from the other talks

For High-Performance Systems in Go –

Use go tool pprof (linux)

(linux) Avoid short lived objects on the heap

Use the stack or make long lived objects

Benchmark standard library builtins ( strconv )

) Benchmark builtins ( defer , hashmap)

, hashmap) Don’t use channels in performance critical path

Channels –

Unbuffered channels are best (mostly). They provide both communication and synchronization.

range keyword can be used to consume all values from a channel.

keyword can be used to consume all values from a channel. Closed channels never block. It will always return the zero value of its type.

nil channels always block.

Practical issue with using Go in embedded systems –

Use C program to interface with Kernel. Don’t use cgo ( cgo enables the creation of Go packages that call C code).

Embrace the interface in Go.

Go: Best Practices for Production Environments –

Single GOPATH for all projects.

for all projects. Don’t create a repository structure until you demonstrably need it.

Configure your editor to go fmt (or goimports ) your code on save, using the default arguments.

(or ) your code on save, using the default arguments. Use these two style guides 1 and 2.

Use package flag for passing configuration to a Go program. A nice idiom for flags is to define them in your func main . That prevents you from reading them arbitrarily in your code as globals, which forces you to abide strict dependency injection.

for passing configuration to a Go program. A nice idiom for flags is to define them in your . That prevents you from reading them arbitrarily in your code as globals, which forces you to abide strict dependency injection. Use package log to log only actionable information.

Panel discussion with Go team members –

This was the icing on the cake. Blake Mizerany hosted a panel discussion with 4 members of the Go team: Andrew Gerrand, Rob Pike, Brad Fitzpatrick and Robert Griesemer.

Sourcegraph has a recap of the entire discussion.

I really liked:

Rob Pike’s gem of an answer to the question “No generics in Go?” Rob – “There are generics in Go, they’re called interfaces!”

Another answer from Andrew Gerrand to the question “What is the next thing that Go can do to increase the rate of its growth?” was of interest to me. Andrew replied “I’m really excited about Go moving into new spaces. Desktop apps, mobile apps – we want to help improve support in these areas in the coming years.” Ah! He said “Mobile apps”, so will Android switch from Java to Go?

Web Services in Go –

type Handler interface {

ServeHTTP(ResponseWriter, *Request)

}



This is the lowest common denominator of a web service in Go. Embrace it, and use it as much as possible.

The Closing Day Keynote by Andrew Gerrand resonated well with the audience.

Code is communication, be articulate, write simple interfaces, precise docs and no need to be clever. Less is exponentially more.

Let’s build small, simple, and beautiful things together.

Interesting Projects

The conference gave me the opportunity to learn about some useful projects either written in Go or having Go bindings.

Airbrake collects and processes 600 million errors a month in GoLang, the leading error tracking system.

Bolt is a low-level key/value database for Go.

Camlistore is your personal storage system for life.

Circuit is a distributed control library that can be reused by many different libraries.

Cloud Foundry CLI written in Go.

CoreOS is a new Linux distribution that has been rearchitected to provide features needed to run modern infrastructure stacks. The strategies and architectures that influence CoreOS allow companies like Google, Facebook and Twitter to run their services at scale with high resilience.

Deck a Go package for presentations.

Docker is an open source project to pack, ship and run any application as a lightweight container.

Equinox is an API and open-source Go library that together allow you to build auto-updating functionality directly into the Go applications that you distribute to your customers.

GNATSD is a high-performance NATS Server written in Go.

Gobot is a Golang framework for robotics, physical computing and the Internet of Things.

GoCover.io helps you see code coverage of any Go package.

go-qml is a QML-based graphic user interface for Go.

goweb is a lightweight RESTful web framework for Go from stretchr.

Heka is a high performance data collection and processing tool.

InfluxDB is a distributed time series, metrics, and events database.

mgo is a rich MongoDB driver for the Go language.

ngrok is a dream for testing localhost with remote APIs!

NSQ – New Simple Queue, a pubsub / messaging framework.

PayPal Beacon device firmware is written in Go. Beacon is a Bluetooth Low Energy device to connect to a customer’s PayPal app when they enter a store.

Poptip creates meaningful, actionable interactions on social media.

SoundCloud and Go – SoundCloud maintains about half a dozen services and over a dozen repositories written entirely in Go. They are increasingly turning to Go when spinning up new backend projects.

Ubuntu Juju is a comprehensive service orchestration framework.

Networking

At the conference, I had the opportunity to meet, network and discuss “Go” with many Rubyists and Gophers.

Rubyists (now Gophers or would be Gophers?) – some who I had met before and some with whom I had interacted only on email and / or chat:

Andy Lindeman, Blake Mizerany, Dr Nic, Katrina Owen, Mark Bates, Matt Aimonetti and Mike Gehard.

Interestingly there was a very strong presence of Rubyists at the conference.



With Mark Bates and Matt Aimonetti With Mark Bates and Matt Aimonetti

Some of the many Gophers I met at the conference:

Beyang Liu, Brian Ketelsen, Chris Schaefer, Damian Gryski, Dave Cheney, Elliott Stoneham, Erik St. Martin, Quinn Slack, William Kennedy among others.



William Kennedy and me with Cory in the background William Kennedy and me with Cory in the background

I had the unique opportunity to meet Go developers from Australia, Canada, China, Germany, France, Japan, Netherlands, South Korea, Sweden, UK and the USA. Probably there were developers from other countries too, but time was too short to meet each and everyone.

GopherCon India?

I did talk to some of the speakers and the Go team and almost all were keen on coming to India, as and when we manage to hold a GopherCon in India. That was encouraging.

My company, JoshSoftware, has been a co-sponsor and closely involved with organizing RubyConfIndia for the last four years. As such, we should be able to do a GopherCon India too.

I was also lucky to meet two local Denver residents Darshan Puttannaiah and Brent Cutcliffe of Qwinix Technologies, a company based in Denver with its software development center in Mysore, India. They too are getting into Go and were very much interested in co-sponsoring and helping out organizing India’s first-ever GopherCon (whenever it happens).

Summary

I was the only Gopher coming all the way from India to this conference and yes it was worth my while! Thanks so much for an awesome conference, already looking forward to next year!