Features I Like about Go
I've been doing a lot of my side projects in Go recently and I love the language and the social considerations that the authors put in place. It's opinionated, productive and deals with actual software engineering. So here are a short list of features I really like about Go.
Statically Linked Binaries
No more having to run bundle on a production machine or deploying wars on contentious Java App servers. What you compile will be the same in development and in production. This is friggin' great. There are so many issues with even just dynamic linking which are a
pain. Especially higher level libraries that deal with dynamic libraries. I'm looking at you Nokogiri. Yes, people will say wait for the first security bug to hit that affects say tls. What are you going to do compile a new binary and ship that? Umm... yes!
A single binary which combines all I need into one file as opposed to a dynamically linked binary which may affect countless other software seems great. Software engineering is replete with enough issues do we need to deal with more when we just want to ship something? Plus it
takes like 2 seconds to build even the largest of Go applications.
Vanity Urls for Packages
We live in 2014 soon 2015. Git is everywhere. If I use an external package and need to make changes to it I should be able to just fork that library, make my changes and use it. Why do I need to muck around with gems, sending pull requests, and doing all sorts of aerobics to use
a modified library? Again I just want to solve problems I don't want to waste time dependency massaging.
No Language Features Past 1980
I am as affectionate about functional programming as the next hipster but at the end of the day languages are tools to solve problems. Having a limited set of features makes the language small and I can grok it all. I don't have to wonder which subset of the language I can use and don't have to wonder which subset someone else has used. Yes, it makes Go a bit more verbose and the language itself is boring but I take that as a feature. It doesn't try to surprise. It is there to help you solve your problem and get on with your life.
Made With Big Projects in Mind
The creators of Go have spend a lot of time working on large projects at Google. And what they cater Go towards is for solving those large codebase problems. Large codebases end up being an exercise in plumbing more than they are about building. And plumbing gets hard when the original construction crew leaves and doesn't leave behind a blueprint.
From the vanity url package names, to go fmt, to the simplicity of the language the creators thought through the social aspect of programming. Most languages don't consider the social aspect or make it a secondary consideration. While this makes the other languages extremely fun to program in---I still love Ruby---it sucks to work in them when the programs get large.