So what (you are probably not asking) did I like and dislike about Go? There are some good points:
- Very fast compilation
- Interoperability with C
- Compiles to native code
- Appears to have proper garbage collection
Unfortunately I think that, like Vala, it’s a bit of a missed opportunity to fill the C replacement niche. It looks as if the language designers have never used a functional language, or if they did, they didn’t “get” it. Some of the real downsides include:
- No type inference. Because obviously it’s 2013 and I want to write types everywhere.
- Bondage-and-discipline, but in odd ways and to no apparent benefit. Like what’s the point of all the odd rules around
=, and what types you can and can’t assign and pass to functions? And why do you have to declare imports, when the compiler could work them out for you (it’ll even moan if you import something which is not used!)
- Hello, world is about 8 lines of code. Camel case! Java rang, wants its boilerplate back.
- No breakthrough on error handling.
- The whole design of GOROOT/GOPATH is completely broken. It’s actually worse than Java’s broken CLASSPATH crap which is some kind of achievement, I guess.
They refuse to add exceptions (probably a good point), but the alternative is C-style error checking on every other line. It’s not even enforced error checking, so bad programmers will still be able to write bad code. And there are good ways to handle errors, eg. process-based transactions, Erlang-style, etc. But that seems to have passed them by.
Oh well, there’s still room for the breakthrough C replacement language.