• Sorry for the delay - distractions galore today. Also, thanks for the link - I updated the post to include it in the summary.

    A few other mistakes that come to mind:

    1. Doing `var m map[string]bool` followed by `m["something"] = true` and then you get `panic: assignment to entry in nil map`. I intend to write something short about this soon-ish. I think what also complicates this is that you can do `var a []int` and it works because you tend to use `append`, but with maps you don't have an equivalent function to add a key and it can catch people off guard. A good friend of mine was just telling me about how this bit him a few times and I've heard that story many times before.

    2. Happens a little later for most devs, but nearly everyone runs into errors where they create a pointer variable, assign it to nil, then return it as an interface and the code that receives it doesn't evaluate it as nil. eg: https://play.golang.org/p/uA87dTyR_E This is commonly talked about with regards to custom errors, but it happens in other cases. I think what makes this really confusing is that literally one thing changes in your code (the return type) yet its impact on other code is much larger than expected, as if statements suddenly start evaluating to false.

    3. Structuring applications - Ben Johnson does a great job talking about this, but people coming from other languages tend to still struggle with this and end up making mistakes that lead to cyclical imports or poor structure and then they seek guidance on how to better structure things. I don't think this is a problem with Go necessarily, but it is a transition that takes some getting used to, especially if coming from langs like Ruby where cyclical imports are perfectly fine.

    Edit: No markdown.. what!? =( I'll leave it there anyway. Hope it doesn't confuse you.