You can abort via panic(), but that is expected to crash the application, which is perfectly fine. It's the act of attempting to catch the abort that is fraught with problems. While in Go that is rare, in languages with exceptions it's normal and expected.
Ignoring an error condition is possible in Go, but so unlikely that it's not practical to worry about it.
As an aside, not that it matters, but logging an error is one of the valid ways of handling it, depending on context.
I just don't believe that most errors can be handled locally so besides returning an error (bubbling up), not much can be done. Go makes this part of the happy path, so neither can be easily seen/reasoned about anymore.
Exceptions do auto bubbling up, while languages with ADTs have more strictness than go, and often have some syntactic sugar/macro to help with the common case of returning the error (rust's ?).
>I just don't believe that most errors can be handled locally so besides returning an error
Sure, but explicit error handling reminds you that the call may fail, and you may want to handle it in some way (or not - then you bubble it up). With exceptions, it creates the illusion of a simple linear flow.
Ignoring an error condition is possible in Go, but so unlikely that it's not practical to worry about it.
As an aside, not that it matters, but logging an error is one of the valid ways of handling it, depending on context.