I see. One way is to create a wrapper error type in layer1, which takes a
layer2 error. Just like os.PathError.
package main
import (
"errors"
"fmt"
)
var (
// Layer1Error = errors.New("some error on layer 1")
Layer2Error = errors.New("some error on layer 2")
)
type Layer1Error struct {
internal error
}
func (le *Layer1Error) Error() string {
return fmt.Sprintf("layer2 error: %v", le.internal)
}
func (le *Layer1Error) Unwrap() error {
return le.internal
}
func main() {
err := callLayer1Function()
fmt.Println(errors.Is(err, Layer2Error))
var l2err *Layer1Error
fmt.Println(errors.As(err, &l2err))
}
func callLayer1Function() error {
err := callLayer2Function()
return &Layer1Error{err}
}
func callLayer2Function() error {
// wrap an error of Layer2 here
return fmt.Errorf("some specific layer2 error message: %w", Layer2Error)
}
On Friday, 9 August 2019 22:43:11 UTC+5:30, Alex wrote:
>
> Hi Agniva,
>
> the problem is: In the main function is no information that there was an
> Layer2 error (layer2 error is not included in the error anymore).
> I don't know how to take the error from layer2 and wrap another error
> (layer1-error) around it.
>
> You can only use the verb "%w" once in a fmt.Errorf() function afaik.
> So if you have a wrapped error object e1, how would you enrich / wrap this
> with another error e2?
>
>
> Thanks,
> Alex
>
--
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/7a97e612-132c-46ac-ad6f-33a3c19632f8%40googlegroups.com.