http://www.youtube.com/watch?v=sln-gJaURzk&feature=playe...
Edit: If you're curious/interested in Go, it's worth watching the whole talk.
I have been following Go along the years, but think they made a big mistake with exceptions. In particular you have to manually write the code from where an issue happens all the way to where it is handled. Exceptions as done in other languages isn't the exact pattern that has to be followed - it is the writing of the boilerplate code that bugs me. Heck they could do something as simple as if the error value returned is not used in any way then an automatic 'return ...vals..., error' is inserted after the call.
https://code.google.com/p/go-wiki/wiki/PanicAndRecover
foo,bar,err=callX(...)
if err!=nil:
return _,_,err
It is the last two lines of boilerplate that need to be present for virtually every call that makes me uncomfortable. Developers will start forgetting or not being diligent which causes problems. Also I think (but don't know) that by the time A gets an Error it won't know what the stack trace is for the original Error. (The stack traces are extremely useful for logging and analytics not for program behaviour.)Needing to write the boilerplate means it is left out. For example look at all the hello world examples. Note how they all ignore any errors from the println. C has exactly the same problem, and I'm disappointed that Go is perpetuating this problem.
The only whitespace character that works differently than C is the newline. In Go, newlines (usually) separate statements, like a semicolon does in C.
We use tabs for indentation and gofmt emits them by default. Use spaces only if you must
Go the language doesn't care if you use tabs or spaces, Go the community would prefer you to use tabs so when your Go code is loaded in whatever random editor any member of the community uses there are no surprises.
About the only good pro-tab stance I have seen is that it allows the viewer to choose a level they prefer, but I would expect consistency would be far better.