Andy and Teddy are waving goodbye

[Permalink]     blog code go programming

Most of the time, when I've got some software I want to write, I do it in python or sometimes bash. Occasionally though, I like to slip into something with a few more brackets. I've written a bit of C in the past and love it but recently I've been learning Go and what's really struck me is how clever it is. I'm not just talking about the technical merits of the language itself; it's clever in several areas:

  • You don't need to install anything to run Go binaries.

    At first - I'm sure like many others - I felt a little revultion when I heard that Go compiles to statically-linked binaries but after having used and played with Go a bit over the past few weeks, I think it's rather clever and was somewhat ahead of the game. In the current climate where DevOps folks (and developers) are getting excited about containers and componentised services, being able to simply curl a binary and have it usable in your container without needing to install a stack of dependencies is actually pretty powerful. It seems there's a general trend towards preferring readiness of use over efficiency of space used both in RAM and disk space. And it makes sense; storage is cheap these days. A 10MiB binary is no concern - even if you need several of them - when you have a 1TiB drive. The extravagance of large binaries is no longer so relevant when you're comparing it with your collection of 2GiB bluray rips. The days of needing to count the bytes are gone.

  • Go has the feeling of C but without all that tedious mucking about in hyperspace memory

    Sometimes you just feel you need to write something fairly low level and you want more direct control than you have whilst you're working from the comfort blanket of python or ruby. Go gives you the ability to have well-defined data structures and to care about how much memory you're eating when you know your application needs to process tebibytes of data. What Go doesn't give you is the freedom to muck about in memory, fall off the end of arrays, leave pointers dangling around all over the place, and generally make tiny, tiny mistakes that take years for anyone to discover.

  • The build system is designed around how we (as developers) use code hosting facilities

    Go has a fairly impressive set of features built in but if you need something that's not already included, there's a good chance that someone out there has written what you need. Go provides a package search tool that makes it very easy to find what you're looking for. And when you've found it, using it is stupidly simple. You add an import declaration in your code:

    import "github.com/codegangsta/cli"
    

    which makes it very clear where the code has come from and where you'd need to go to check the source code and/or documentation. Next, pulling the code down and compiling it ready for linking into your own binary takes a simple:

    go get github.com/codegangsta/cli
    

    Go implicitly understands git and the various methods of retrieving code so you just need to tell it where to look and it'll figure the rest out.

In summary, I'm starting to wonder if Google have a time machine. Go seems to have nicely predicted several worries and trends since its announcement: Docker, Heartbleed, and social coding.

  Building a componentised application   blog docker microservices python   Podgot   audio blog podcasts   Corporalism?   blog   Why-fi?   blog   It turns   blog   My nicks   about   Cleaning out my closet   blog   Devicive   blog   Why am I called Stilvoid?   about   Geek Code   about   Thoth   words   Pinally   blog pi   Keychain and GnuPG >= 2.1   blog   TODO   blog   Testing a Django app with Docker   blog django docker proxama   Just call me Anneka   blog code   Stony Silence   blog   When all the things went wrong   blog   Things   blog   Lessons learned   blog holiday   O Baggage Where Art Thou   blog holiday   All fired up   blog   Quayside   blog   tmux   blog linux   Simple mail transfer pondering   blog linux   Ramble   blog   Eligarf   blog   Laziness   blog   Netcat   blog linux   Judon't   blog   Things   blog   btw   blog c code   Stuff what I done   blog   Diet?   blog   TODO   blog   Shootah   code games games inactive   Tatil   blog holiday   Things we learned at the LUG meet   blog linux   MarkPoint   code command line desktop inactive other   Luck   blog   Yawn   blog   HBTM :)   blog code git   TODO   blog   Krobes   code games games inactive   Homophones   words   Non-euclidian pork scratching   blog   Lost at C   blog c code   JSTLV   code inactive other web   Ire   blog code   Ire   code command line inactive other   So, so dry   blog code   Gruff   code inactive other web   Things I've written recently   blog code   require("child_process");   blog   JZON   code inactive other web   Wyrm   code games games inactive   Picture Puzzle   code games games inactive   Zoomsite   code inactive other web   Rotate4   code games games inactive   Lines   code games games inactive   BreakIn   code games games inactive   nosef   code inactive javascript server server   Scary stuff   blog   Primes   blog   Hokey Cokey   blog   Web terminal lense book   blog   Strange lunch break   blog   Obfuna   code inactive other programming   Markdown   blog   ploxy   code command line inactive server server   miniserv   code command line inactive server server   Gnowt   code inactive other web   dmenu-notify   code desktop inactive other   Violining a contemptible fellow   blog code git   Break In!   blog games   xmodmap Hints and Tips   blog linux   Black Jack - pick up seven!   blog games   My favourite spoonerisms   words   Good things that have happened in the past week   blog   Good times with git   blog git   It's all Geek to me   blog   Javascript Closures   blog code javascript   Waffle. Move along.   blog   Things I learned today   blog   Hey, at least I'm not rioting   blog   HTML5 and holidays   blog holiday   Blah, cold. Do not want.   blog   Worst.Landlord.Ever   blog   Wheeee   blog   First!!1!one!!eleven   blog