It really shouldn't need any type annotations. A Hindley-Milner type system would have been more flexible and require no type annotations (as well as far less interface {} and unsafe casts), and still support everything Go has. The language as a whole seems to just commit all of the mistakes of C, except with garbage collection.