traefik / yaegi

Yaegi is Another Elegant Go Interpreter
https://pkg.go.dev/github.com/traefik/yaegi
Apache License 2.0
6.94k stars 343 forks source link

impossible type assertion #1651

Open thorsager opened 1 month ago

thorsager commented 1 month ago

The following program sample.go triggers an unexpected result

package main

type Mover interface {
    Move() error
}

type car struct {
    Mover
}

type engine struct {
}

func (e *engine) Move() error {
    println("engine moved")
    return nil
}

func newMover() Mover {
    return car{
        Mover: &engine{},
    }
}

func main() {
    mover := newMover()
    if _, ok := mover.(car); ok {
        println("mover is a car")
    }
    _ = mover.Move()
}

Expected result

mover is a car
engine moved

Got

run: ./sample.go:27:14: impossible type assertion: main.car does not implement main.Mover (missing Move method)

Yaegi Version

v0.16.1

Additional Notes

No response