• This is a really interesting article as it points out some of the differences between Java and Go - doing a port of a large codebase will really show up which areas, though of course it will also lead to writing Java in Go to some extent. It would be interesting to know the reasons for the port, did they want to replace the java version, or is it to sit alongside it?

    Shows how important testing is to be confident that a port like this is working, and how it can help guide you through a big project.

    The query builder was interesting as I've taken a different approach to this. I like the chaining approach to building queries, but it's perfectly possible to do this while returning an error for the functions that matter (the ones which fetch the data). You just have to separate out the query building (which returns a query) from the error returning functions (which typically return results, error).  Then the stateful error is not necessary.

    Interesting note on getters and setters - I've found this refreshing coming from other languages where this is the norm (Java, Ruby, Obj-C) - it's more a cultural thing than a requirement, and I can count on one hand the number of times I've truly needed a getter or setter, in which case I can make the field private and write one. Getters and Setters seem like unnecessary encapsulation to me given the amount of ceremony required.

    Function overloading - I can't say I miss this much, if functions become too verbose it's usually a sign there is something wrong and you're trying to do too much with too many variables. Another approach you can use if passing pointers not types is to allow a nil pointer.