interface identity (was Re: Proposed new dependency: github.com/juju/errors (and github.com/juju/errgo))

Andrew Wilkins andrew.wilkins at canonical.com
Wed May 28 02:04:06 UTC 2014


On Wed, May 28, 2014 at 9:52 AM, Tim Penhey <tim.penhey at canonical.com>wrote:

> On 28/05/14 13:48, Andrew Wilkins wrote:
> > On Wed, May 28, 2014 at 8:47 AM, Tim Penhey <tim.penhey at canonical.com
> > <mailto:tim.penhey at canonical.com>> wrote:
> >
> >     On 28/05/14 12:43, Nate Finch wrote:
> >     > This sounds like one of those "if you have to ask this question,
> >     you're
> >     > doing something wrong".
> >     >
> >     > Can you give an example of where we need this?
> >
> >     Sure... let's say we have a stack of errors, for simplicity of the
> >     argument lets say it is a slice of error interface values.
> >
> >      stack []error
> >
> >      * an error is pushed on to the stack initially, we now have one
> error
> >      * the same error is pushed (or appended - I don't care)
> >      * we now have the same error twice
> >      * I push a new error on the stack, so it looks a little like this
> >        [err1, err1, err2] right?
> >
> >     Now iterating through this slice I want to know when the error
> changes.
> >
> >
> > Can you explain where equality fails?
>
> Equality fails when the interface is satisfied by a non-comparable value
> type, like a struct with a slice in it.


I see. In that case, I guess you'd have to use reflect.DeepEquals to
collapse arbitrary errors.

> I guess you're thinking you'd like to do something like "x is y" in
> > Python. There's no such thing as objects in Go, so no universal
> > definition of identity either.
>
> But an interface is effectively two pointers, one to the type and one to
> the thing that satisfies the interface.  Identity in that case is pretty
> simple.
>

If the pointer is the same, which it won't be if you're storing a slice in
an interface; slices are wider than pointers.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/juju-dev/attachments/20140528/4fb6ffb7/attachment.html>


More information about the Juju-dev mailing list