5 ms·
%W exists to solve this
by wbl 2y ago
%W exists to solve this
- the_gipsy 2y agoHow? Stringly matching? That's not typesafe at all.
- wbl 2y agoNo it wraps the underlying error
- the_gipsy 2y agoBut the underlying error stays unmatchable. Doesn't sound like a solution if you have to duplicate every error type, and worse, they don't even map 1:1 but now you have the same underlying error wrapped to god knows how many different errors. For example, the lib produces some an error "bad file descriptor". You'll be wrapping it when you call fileOpen, fileDelete, etc etc 20 times. So you will be wrapping it in "open error", "delete error", etc, 20 times. You cannot try to match it to "bad file descriptor", that information is lost, you now have 20 relatively useless errors. Except if you stringly match.
- wbl 2y agohttps://pkg.go.dev/errors#Is https://pkg.go.dev/errors#Is and https://pkg.go.dev/fmt#Errorf https://pkg.go.dev/fmt#Errorf clearly state that there is a way to match these errors if the package exposes the values, which the stdlib does.
- Yoric 2y agoIt would, if people actually defined new errors. But, as I mentioned in my message, people just use `errors.New` or `fmt.Errorf`, all the way down, so you end up with errors that cannot be matched. Which means, in turn, that if these are errors that should be handled properly (and not just propagated/logged), they cannot.