Just to be clear: are you hard-coding the variable name "err" into the
semantics of "orelse"? That is, you can't assign the error return to a
variable of any other name?
I disagree that this makes the job of linters any easier than it is today.
For example, if you'd written
...
err = io.Copy(w, r)
err = w.Close() orelse return err
}
then you'd still need to detect "value assigned but not used" in the linter
(assuming it doesn't become *compulsory* to use "orelse" on any assignment
to a variable called "err")
On Sunday, 30 July 2023 at 06:57:15 UTC+1 DrGo wrote:
> I looked at the long list of proposals to improve error handling in go but
> I have not seen the one I am describing below. If I missed a similar , can
> you pls direct me to where I can find it. If not what do you think of this
> approach.
>
> This involves introducing a new keyword "orelse" that is a syntactic sugar
> for an "if err!=nil" block.
>
> The example code in Russ Cox's paper[1] will look something like this:
>
> func CopyFile(src, dst string) error {
>
> r, err := os.Open(src) orelse return err
>
> defer r.Close()
>
> w, err := os.Create(dst) orelse return err
>
> defer w.Close()
>
> err = io.Copy(w, r) orelse return err
>
> err = w.Close() orelse return err
>
> }
>
> It is an error to not return an error from an orelse block.
>
> In my eyes, this has the same explicitness and flexibility of the current
> style but is significantly less verbose. It permits ignoring the error,
> returning it as is or wrapping it. Because orelse is not used for any other
> purpose, it would be easy for reviewers and linters to spot lack of error
> handling.
>
> It also works well with named returns. e.g.,
>
> func returnsObjorErro() (obj Obj, err error) {
>
> obj, err := createObj() orelse return //returns nil and err
>
> }
>
> otherwise orelse is like "else" so e.g., it can be followed by a block if
> additional cleanup or error formatting etc is needed before returning, eg
> w, err := os.Create(dst) orelse {
> ....
> return err
> }
>
> Similarity to "else" hopefully means that it is easy to learn. It is
> obviously backward compatible
>
> What do you think?
>
> [1]
> https://go.googlesource.com/proposal/+/master/design/go2draft-error-handling-overview.md
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/330e88d9-8072-4614-ae56-8ce9c59517f3n%40googlegroups.com.