Saturday, April 18, 2015

A Highly Opinionated List of Go Resources

Lets get this straight up front, I am a lover of programming languages. I really think that there should be a support group. A colleague recently commented "You have never met a programming language you didn't like". Although that was probably meant as an insult, it is very true and I embrace it. Not hating any language gives me the ability to see the good and bad points and pick the right one for the problem I'm trying to solve. From assembler to PHP, C to Rust, Clojure to Python, I enjoy them all. Go, however, has stood out among the crowd.

The good
  • Easy to learn
  • Great tools
  • Friendly community
  • Fantastic standard library
  • Good open source libraries
  • Fast execution speed
  • Safe
  • Functions and Channels are first class citizens
  • Crazy fast compilation / link speed (seriously think someone sold their soul for this)
  • Great editor support
  • Very cool interface duck typing
  • Built for server software (duh, written by Google what did you expect?)
  • Rob Pike 
...and the bad
  • Terrible support for generic programming and worse, an inability to admit that it's a problem (please see AA's first step)
  • Limiting type system
  • Magic types (slice, map, chan) 
With that off my chest lets get to the list.

Who can I talk to? 


What I use
  • Stack Overflow If you have been a programmer more than a month, you will have already been here. Dramatically over curated but still the best resource for getting specific advice on any piece of code.
  • Reddit Informal and kind to new gophers (apparently this is what we are called). Questions and general conversation about Go are welcomed.
  • Google golang-nuts Google golang-nuts is also a friendly group. Though more technical than the Reddit sub, I have still found it to be helpful to new Go programmers.
  • Google golang-dev golang-dev is for the discussion of the language and the tools used to build it. This is not a place for newbie questions. If you post, you better know what you are talking about.
  • Github The keeper of the worlds source code
Other places that I don't use but are popular
  • #go-nuts on irc.freenode.net IRC, when you simply can't wait for a response
  • Google+ Communities Apparently Google has some sort of social thing. 
  • Twitter of course
  • User Groups around the world

Editor

You are using vim, right? No? ahh, NeoVim? cool.
What! ok, here's some other stuff

Automation Tools

  • GoAuto Why use a config file when you can have an app for your workflow? oh, and I wrote this. 
  • Slurp Go
  • Grunt Node.js
  • Gulp Node.js

Tools

  • goimports Hook into your editor and it will add your imports and format automagically
  • go test Run your tests
  • go install Build your app into a binary or package
  • go build Compile your app or package
  • gocode Autocompletion
  • godef Goto definition
  • gorename Refactoring
  • oracle Source analysis
Be sure to checkout Github for available packages. The community has built a variety of packages in a surprisingly large list of domains.

In my next post, I will walk through the process of building my first Go package. Until then, Go write some code.