On Sun, Jul 3, 2016 at 12:27 PM, Jon Bodner <j...@bodnerfamily.com> wrote:
>
> I'm working on a DAO adapter layer helper called Proteus
> (https://github.com/jonbodner/proteus), and ran into an interesting quirk in
> what Go considers equivalent interfaces. I recreated a simplified version of
> the issue is at https://play.golang.org/p/BS3-bUKtO9 .
>
> The code that I linked does not compile, with the error:
>
> V does not implement CalcB (wrong type for Calculate method)
> have Calculate(int) ResultA
> want Calculate(int) ResultB
>
>
> ResultA and ResultB are identical interfaces; both define a single method
> Result that takes in no parameters and return an int.
>
> However, if I put in a wrapper around V, I can get it to work:
> https://play.golang.org/p/XUoZwsBaFn
>
> What I don't understand is that the wrapper doesn't do any casting of
> ResultA to ResultB, and that's OK in this situation. But the Go compiler
> can't figure out that ResultA and ResultB are identical without that
> wrapper. Why is that? Why does the compiler fail the first case and pass the
> second one?

ResultA and ResultB are assignable but not identical.

https://golang.org/ref/spec#Type_identity
https://golang.org/ref/spec#Assignability

For the specific case of interface types, you may be interested in
https://golang.org/issue/16209 .

Ian

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to