Learning how to write "good" go code (in some definition of good) sometimes mean you need to unlearn old habits. This is especially true when it comes to asynchronous code if you have a C# background.
When writing Go code the general guideline is not to create interfaces unless it is really needed. A good example would be an interface with only one concrete implementation. Now for the mind boggling part; in C# we would probably create that interface if the type needs to be faked in some test while in Go you wouldn't. Or actually you would. But in a different place...
Before you go crazy on me screaming that making code testable for the sake of testability is bad I'd like to agree. However testable code have other nice properties like loose coupling for example - something you likely want. Anyway, in this article there is a great comparison between using inheritance vs composition to implement a class and how that affects both the design of the class and the tests. TL/DR; use composition and dependency injection. Please.
As part of on boarding my new job the IAT was mentioned. And then when I attended some social engineering talks at DefCon a few weeks ago a comment was made that in order to be a good social engineer you also need to know yourself.
A couple of months before I left my previous job I received a suspicious email - apparently I've received a fax and it was inside a linked PDF. I was a little bit surprised when I looked into what this really was about.
So it has been a long time since I encountered a user interface that make stupid assumptions about their users but a few weeks ago my bank managed to do so.
November 2008 had a lot of fun reads and I had a great time going over all those old post. But a few things stood out apart from the $1,000 I apparently spent on fraud prevention fees for US visas.
As a seasoned C# developer you should be familiar with the common pitfalls of closures where a variable in a lambda function is not always what you think it is. Go's pointers can easily introduce a similar problem even without the use of lambdas.
Ok, so I was lucky. Somebody else already covered the basics and I share the first impressions covered in this article. Since Java and C# (at least compared to Go) are pretty much the same, this is a good first read if you are in the C# world and want to explore the Go world. However there are two things I would like to point out.