I'll list a few things I learned in the process of rewriting it to Golang:
First, I want to emphasise that learning Golang has a lot less "WTF moments" than learning other languges.
My project has cca 9000 lines of code. I think that equivalent Python code is shorter, but if you write unit tests (you should), a lot of the Python ones will test things which in Golang aren't needed (because because they are caught by the compiler!).
The golang code tend to have more (but shorter) lines because in Golang you don't write things like:
something.DoSomething().DoSomethingElse().ThirdOperation()Any of the .DoSomething(), DoSomethingElse(), ... calls can "throw" an exception. In many languages you just expect that somebody else will catch those exceptions. In Golang there is no "throw an exception". If there is an error you need to handle it immediately. The result is that you write every operation in a new line, and not cram them all in one.
But that's not necessarily bad, you have more lines, but they are all simple operations and easier to read and understand.
I thought that a big problem would be no DOM-based XML parser, but I love the builtin JSON and XML APIs!
Versioning dependencies sucks.
There are a lot of libraries*, but most are not mature enough. This will probably change with time.
And, yeah, it has no generics.
*If you are interested, here are my own open source libraries and utilities: