Go can already pass/pipe the result of a function, which returns multiple
values, to another function, which accepts the same values as arguments.
Now, assume we have a function named funcCtx:
func funcCtx() (res int, err error) {
// ...
}
Having that, these does not look that ugly:
func funcCtx() (res int, err error) {
res, return() = action()
// or
res, panic() = action()
}
Those statements will have an effect, only if the returned value is not
nil. For performing some actions, before the actual return or panic:
res, return({ log.Println(err) }) = action()
There is this restriction, that the function that contains this block,
funcCtx, has to return named return values - for both handling the zero
values and having a one to one mapping between its return values and those
of action function.
Also for having a name, err in this case, that makes it clear, which
variable we are talking about.
In the proposal
<https://go.googlesource.com/proposal/+/master/design/go2draft-error-handling-overview.md>,
it's not clear where the err variable comes from (what if there are three
return values?)
On Monday, July 8, 2019 at 4:17:58 PM UTC+2 [email protected] wrote:
>
> I think the xerrors proposal will solve a lot of people's problems. You
> still repetitive boilerplate, but at least decent debugging is possible.
>
> -----Original Message-----
> From: Chris Broadfoot
> Sent: Jul 8, 2019 9:04 AM
> To: Robert Engels
> Cc: Chris Passas , golang-nuts
> Subject: Re: [go-nuts] Go 2018 Survey "Error handling 5%"
>
> See the errors proposal here:
> https://golang.org/design/29934-error-values
>
> Implementation in tip (available in 1.13 beta)
> https://tip.golang.org/pkg/errors/
>
> Implementation in x/xerrors (backwards compatible):
> https://godoc.org/golang.org/x/xerrors
> xerrors - GoDoc
>
>
> On Mon, Jul 8, 2019, 9:54 AM Robert Engels <[email protected]> wrote:
>
>>
>> I think you are on to something. As I've said, the boilerplate is ugly,
>> but manageable. It is the process of using and reporting errors that is the
>> problem.
>>
>> If the error interface were expanded, to included methods like
>>
>> int Type()
>> int SubType()
>> []Stack StackTrace()
>> error Cause()
>> Log(w Writer,string format,...)
>>
>> with stdlib defining constants for errors, and user developed constants >
>> N, the chances of constant collision is minimal.
>>
>> Alternatively, define like this
>>
>> string Type()
>> string SubType()
>>
>> with the Type being package.SomeErrorName
>> and sub-type being package.SomeErrorName.SubErrorName
>>
>> to allow easier capture and retry.
>>
>> To go even further, add a
>>
>> bool Permanent()
>>
>> to signify if the same call is made with the same parameters, it is also
>> fail - unless some action is taken (network reconfig, etc.) This is a more
>> difficult implementation, but could be just a 'hint'.
>>
>> It's is some amount of work to define the constants, and change existing
>> code, but it is just busy work. The Go error handling is worse than C in
>> that at least in C, the api doc clearly spells out which error codes can be
>> returned, and why. With the Go error interface, and the 'minimal api doc',
>> what is returned when is anybody's guess.
>>
>>
>>
>> -----Original Message-----
>> From: Chris Passas
>> Sent: Jul 8, 2019 8:32 AM
>> To: golang-nuts
>> Subject: [go-nuts] Go 2018 Survey "Error handling 5%"
>>
>> We are all aware error handling was tied for 4th most common challenging
>> when working with Go in the 2018 survey.
>>
>> There is not description of what about error handling. I'm sure I missed
>> the conversation but how did we get to the point of deciding it was the if
>> err!=nil that was the "challenging part"?
>>
>> Personally the only thing I wish was different was we could have error
>> times/categories in addion. Basically just a way to allow us to not need
>> the following.
>>
>> if strings.Contains(err.Err(),"timeout")
>>
>> Most of the time all you care is there was an error and don't parse the
>> message to decide what to do next. There are cases where you might decide
>> how to handle it based on the message.
>>
>> There are messages like "Connection failed to -> 192.168.1.1", this is
>> useful but also makes the error something you can't check for without
>> substring parsing.
>>
>> What if we could do something like
>>
>> if err.Type()=="Bad Connection"
>>
>> but then you could still return or log the 'err' as normal and get that
>> extra info.
>>
>> --
>> 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/fa12d854-c317-4477-98b1-32ca883d2093%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/golang-nuts/fa12d854-c317-4477-98b1-32ca883d2093%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>>
>>
>> --
>> 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/1215816141.2411.1562594037454%40wamui-charming.atl.sa.earthlink.net
>>
>> <https://groups.google.com/d/msgid/golang-nuts/1215816141.2411.1562594037454%40wamui-charming.atl.sa.earthlink.net?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
>
--
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/02b8d1d7-fb4f-4548-b029-ebb3ca49284an%40googlegroups.com.