You have implemented error on *Thing, so it is *that* which fmt is running,
which then in turn runs the implementation from your wrapped error.
If you don't wish fmt to treat your *Thing as an error, you must remove
method Error() string from it.
On Tuesday, August 28, 2018 at 5:15:31 PM UTC-7, Louki Sumirniy wrote:
>
> I discovered quite by accident and now I can't find anything saying as
> such, but this example
>
> package main
>
> import (
> "fmt"
> "errors"
> )
>
> type Thing struct {
> err error
> }
>
> type thing interface {
> Error() string
> }
>
> func (t *Thing) Error() string {
> return t.err.Error()
> }
>
> func main() {
> t := new(Thing)
> t.err = errors.New("testing")
> fmt.Println(t)
> }
>
> https://play.golang.org/p/xBIGIvSZkqO
>
> as you can see by running it, prints the error value inside the struct.
>
> I am writing a library where I am using a 'pipeline' model so I can string
> pointer methods together in a chain, which requires putting an error value
> inside the structure, and then it does this when I print the struct. It's
> quite handy but unexpected. I assume if a struct satisfies the error
> interface it calls it to generate the string.
>
--
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].
For more options, visit https://groups.google.com/d/optout.