Struct embedding works like this:

type ActionNode struct {
    basicNode
}

Turns into:

type ActionNode struct {
    basicNode basicNode
}

func (a *ActionNode) OutputsTo(n2 node) {
    a.basicNode.OutputsTo(n2)
}

So basicNode will behave as a field of ActionNode with wrapper functions.
If you must embed and get basicNode out of a interface then you need to add 
to your interface a new method to get basicNode, 
e.g. https://play.golang.org/p/QhTmqeg9vgU

On Wednesday, 2 May 2018 03:43:17 UTC+8, Mark Nahabedian wrote:
>
> I don't know why I'm getting this interface conversion error or what to do 
> about it.
>
> I define an interface, node, and a struct, basicNode that implements 
> behavior common to all nodes.  I also define ActionNode and TestNode which 
> both anonymously embed basicNode.
>
> basicNode implements OutputsTo which links the receiver with the node 
> passed as argument.
>
> I get the runtime error
>
> panic: interface conversion: main.node is *main.ActionNode, not 
> *main.basicNode
>
>
>
>
> Here's a playground link that exhibits my problem:
>
> https://play.golang.org/p/ZeIkJSd7qB0
>
> 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 golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to