My Objectives

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.

Go’s import 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.

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)

Avoid short lived objects on the heap

Use the stack or make long lived objects

Benchmark standard library builtins (strconv)

Benchmark builtins (defer, 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.

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).

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.

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.

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.

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!