> In the example, there is a "typo" in the spelling of a method name
("Buuuug" instead of "Bug"), and that typo caused the generate code to
exhibit an infinite recursion in method lookup.
No, it has nothing to do with a "typo". I removed the Buuuug() method and
infinite recursion still occurs at runtime because Go cannot find a
concrete implementation of bug and you have self-referenced your main
struct that needs an implementation of VTable in the VTable field of your
struct. Provide a concrete implementation of Bug() and that problem goes
away.
https://play.golang.org/p/zA1U47AAgI0
Le lundi 12 mars 2018 12:20:56 UTC, Maverick Woo a écrit :
>
> Hi,
>
> I am exploring a pattern to achieve a desirable aspect of vtable in Go.
> For now please put the vtable consideration aside, and see an example I
> have put together for this post:
>
> https://play.golang.org/p/ctkwGuYGqiy
>
> In the example, there is a "typo" in the spelling of a method name
> ("Buuuug" instead of "Bug"), and that typo caused the generate code to
> exhibit an infinite recursion in method lookup.
>
> This infinite recursion looks reasonable to me and I consider the Go
> compiler & runtime to be doing the right thing here. My question is: is
> there a way to *statically* catch this typo, in the same spirit as the
> ineffective attempt at the end of the playground example (a "var _ type
> assertion")?
>
> The situation here essentially involves a type that does not provide a
> method to override a declared method in an embedded interface value. I
> recall method promotion for interface values is dynamic, and so I am not
> hopeful there would be a static solution for this "typo" problem. However,
> I thought at least I can ask for advice here. :>
>
> Thanks!
>
> Maverick
>
> P.S. This thread is really not intended to discuss vtable in Go and I am
> not advocating that this "vtable pattern" in the playground example is the
> right approach to write Go in every situation where dynamic dispatch is
> needed. In fact, in my experience, this is far from the truth and the
> typical "accept an interface value as an argument" works in most cases.
> However, I would also hope we don't stigmatize a concept just because it is
> not the best approach in every case. To see one possibly-compelling use
> case of this pattern in a concrete toy example, I have written more in
> https://www.reddit.com/r/golang/comments/83qboe/the_vtable_pattern_in_go/
> and the associated GitHub repo. I hope the README.md in the repo would be
> sufficient to explain a niche case when this pattern may be useful. Please
> feel free to leave you comments there too! Thanks!
>
>
--
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.