Also asked this on reddit and the feedback can be found here: https://www.reddit.com/r/golang/comments/12tsnhf/who_returns_specific_error_interfaces_to_model/
Torben Schinke schrieb am Mittwoch, 19. April 2023 um 12:01:33 UTC+2: > We are a team of experienced developers and are currently discussing how > we may improve our modeling of expected domain errors in our layered > architecture. We are used to work with the idiomatic way of defining and > matching against our custom error types. We followed and understand the > design decisions of the error interface and its usage within the standard > library. However, we are yet dissatisfied with our developer experience due > to the limited expressiveness. For example, it is quite common to oversee a > mapping case of an infrastructure error into a domain error. It is clear, > that we try to document our "error sum type" but without bothering the > compiler, that is just not helpful enough. > > So we are now considering to define custom error interfaces with marker > methods to represent a sealed set of domain errors. The intention is to > create the most type safe coupling for error handling, which the Go > compiler can guarantee - just like we do with regular parameter types. We > don't need (or want) covariant result types here. And by still using an > interface, we also avoid the interface-type-not-nil edge case. > > *I'm wondering how others deal with this in practice. * > *Are there any experience reports? * > > Example > // CalculationError defines a sealed set of multiple domain error types > type CalculationError interface{ > error > failedCalculation()bool > } > > //... > > // ApplyCalculation is more specific about the error and violates > intentionally idiomatic go but > // we have a tight coupling anyway. > func ApplyCalculation(p SomeDomainType)(SomeDomainResult, > CalculationError){ > //... > } > > related discussions (excerpt) > > - https://go.dev/blog/error-handling-and-go > - https://go.dev/blog/go1.13-errors > - https://github.com/golang/go/issues/19412#issuecomment-1464178165 > - https://dave.cheney.net/2014/12/24/inspecting-errors > - > > https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully > > - > https://blog.merovius.de/posts/2018-01-21-what_even_is_error_handling/ > - ... > > -- 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 golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/5a3bb83f-bfe3-43b6-8336-ff0b067dadb2n%40googlegroups.com.