One school of thoughts is that exception is a non-local goto that might span many levels of calls, and that can be non-trivial to understand. Languages without exception has clear paths of return in a function.
True, but so what. The code I like the best is the code I don't even have to write. Having to write all the intermediary code between where an exception happens and where I'd like to handle it is annoying.
And the "understanding" argument applies to other things, such as using a compiled language instead of assembly or GC instead of manual memory allocation.
You should mind writing code that the compiler can write for you, which is exactly what you do when you don't have exceptions (you simulate bubbling up the error manually).
The assumption here being that if you do not have exceptions, one must write all the intermediate code. That exceptions are the only way of avoiding this.
While in Go this may be the case, it is not true in general. One could use an error monad to achieve the exact same thing, albeit in a much safer manner.