I have been programming in Golang for over 4 years now. In the early days of http://siminars.com, while I was hunting for a language that could offer type safety, compile cross system binaries so shipping code will be easy, I landed upon Golang.
It’s been an interesting four years since then, where I have witnessed many things change around the language. I am also fortunate to have closely watched a language and its community mature in my relatively short career. We can disagree about the maturity of the community and I will touch upon that later.
While the core of the language has not changed much because of Golang core team’s promise to keep it backward compatible, the community and acceptance of the language has definitely improved.
I had been keenly looking forward to the 3rd week of February, because it was time for Gophercon, India (http://gophercon.in) immediately followed by Gophercon, Dubai (http://gophercon.ae) , Golang conferences conducted and helped by Emerging Technology Trust (ETT), a non-profit organization, established to organize and conduct technology conferences in India.
I had the opportunity to present a talk at both of the conferences. Since the conferences were almost back to back the topic was pretty much the same with a slight variation based on the crowd. This post is a regurgitation of my experience at these conferences, Bangalore vs. Dubai and my overall experience with Golang.
Bangalore is touted as the Silicon valley of India. It has neither a history of a gold rush nor the geography of a valley. They should probably rename it to “IT Plateau”… where traffic halts.
I presented a talk at the 2015 edition of Gophercon Bangalore as well. While last year was a showcase of what the world had been doing, it was pleasing to see repeated local population at the conference who have now started using Go at their respective organizations.
While there were some very interesting after-party talks at the Bangalore version, Dubai’s attendees appeared nascent about their exposure to Golang. I would assume that the heavyweights never showed up.
Having praised the Golang community and its growth in number and quality of contributions, it’s still not mature enough where we care less about bashing other languages and frameworks and rather, purely focus on the Infrastructure and libraries that we have created using Golang. The nature of discussions in the KDE and Python community would be more constructive and informative. However, it should be a matter of time that, with so many heavy duty projects like docker, kubernetes, consul, terraform etc being done in Golang, the conversations self evolve for the better.
My talks, at both the conferences were about a Microservices Library called Gilmour. Microservices are a talk of the town and while most of them focus on HTTP based service oriented architectures, Gilmour does it over non-HTTP based transports using Redis backend. Gilmour is a cross language library, so you can have services implemented across multiple languages. My slides are available at https://speakerdeck.com/meson10/micro-services-architectures-using-gilmour and once the videos are out I will update the links here. The Gilmour library and other helper tools can be accessed at http://github.com/gilmour-libs/
At http://datascale.io we consume Gilmour for all our backend servers. Every time you send a request for a cluster creation, cluster details or in an unfortunate case a cluster teardown request, frontend server issues a gilmour request on a topic like ‘request.cassandra.bringup’ which a backend server will be listening to. The ability to create Unix-like compositions makes Gilmour very handy and easy to scale. Here’s an example composition done in ruby:
A similar implementation in Golang looks like this:
Gilmour started off as a small library that provides an abstraction to deal with subscriber publisher pattern provided by Redis, but it has gradually shaped up into a microservices framework with abilities like health monitoring, error reporting etc. You can read up more on https://github.com/gilmour-libs/gilmour
Also, each language implementation has detailed examples of how you can use Gilmour in various problem areas. Example: https://github.com/gilmour-libs/gilmour-e-go/tree/master/examples
We also use Golang in several other components where deployment and shipping is a key factor, like agents on each of customer nodes which need to perform long running jobs and use Gilmour to report progress and results.
Going forward, our main focus is on improving overall Gilmour API and make it feature rich. Please follow the Gilmour Project on github to keep up with the project improvements.
With any upcoming technology, the biggest fear is of it fading away. With each passing year though, I am convinced that Golang is here to stay. It is relieving to know that the language is not just an experimental project, and the long man hours spent learning it will not be wasted.
The use cases of Golang are continuously expanding. It’s no longer a language to generate command line tools for your servers. You can now create web applications, mobile APKs or use it to connect your “internet of things”. The Golang team is continuously improving under the hood stuff like cross compilation, scheduler improvements and language internals like single digit Garbage collection times which will deliver that boost of speed without USADA catching you for that!
I hope that the Dubai and the Bangalore chapters will continue to conduct more such conferences.
By Piyush Verma
Piyush Verma is a Platform and Infrastructure Engineer with Datascale.io. He is an ex-KDE developer and codes for Coffee and House music. He likes Multiprocessing, Distributed systems, APIs and automating everything. Previously, he created Siminars.com and two other successful shutdowns. When not coding he can be found running or cycling around the town.