-
Notifications
You must be signed in to change notification settings - Fork 26
Open
Description
Error handling is tedious, and when writing tests we are prioritizing getting the test written quickly rather than necessarily making it the most robust piece of code we ever wrote.
I propose adding the following:
func (c *C) Recover()
func Try(error)
func Try1[A any](A, error) A
func Try2[A, B any](A, B, error) (A, B)
func Try3[A, B, C any](A, B, C, error) (A, B, C)
func Try4[A, B, C, D any](A, B, C, D, error) (A, B, C, D)
where the Try
functions panic if err
is non-nil. Otherwise, it peels off the error
and returns the other arguments as is.
The TryN
functions are defined such that N
is the number of return arguments. Generics in Go do not have variadic parametric types, so we cannot express a generic function with a generic number of arguments. Try4
should be sufficient since no standard library function has more than 4 return arguments.
Example usage:
func Test(t *testing.T) {
c := qt.New(t)
defer c.Recover() // catch errors panicked by calls to `Try` below
zr := qt.Try1(gzip.NewReader(...))
b := qt.Try1(io.ReadAll(zr))
... = b
}
Metadata
Metadata
Assignees
Labels
No labels