• I really like this proposal. It is simple, minimal and addresses the main point of complaint which people have about error handling in go (verbosity).

    I have no problem with encouraging errors to bubble up, as there is a clear flow of control and errors must be handled at the appropriate place in the chain (usually one or two levels up).

    The one thing that I'd maybe change is to leave the working code alone and concentrating on the bits people actually don't like (the error handling boilerplate). So instead of a new try keyword, just have a new check keyword with similar semantics which just takes the error as an argument, and on non-nil error returns nil values and the error.

    f, err := os.Open(filename)
    check(err)

    That would mean far fewer changes to code, things would read very much as they do now, but a bit less verbose, and as it's a function no new keywords required.