Hacker News new | ask | show | jobs
by julvo 2178 days ago
The problem with this is, that the caller of the function which returns what you wrote (i.e. a dynamic error message) can't match the error anymore for conditional error handling. That's because errors in go are just strings. I guess a solution could be to provide an error matching function but that seems quite cumbersome compared to typed errors.
2 comments

This problem has been addressed in Go 1.13 with wrapped errors. If you get an error from a filesystem operation, you can

  return fmt.Errorf("ListThings failed: %w", err)
which is a different error type, but the caller can downcast it into the original filesystem error type (even across multiple layers of wrapping) if they're interested in specifically these types of errors.
You should never match against "err.Error()" for conditional error handling, a better solution is to use a custom error type. There are a bunch of different ways to approach this in Go.
Ah that's better, thanks. here a link for others who are reading this https://gobyexample.com/errors
Except most libraries do nothing of the sort, so you end up having to do a substring search.
I've rarely run in to this, but if you do then I'd expect most people will be happy to accept a PR.