Проверка корректности type assertion между интерфейсами
Условие задачи
Необходимо определить что выведет программа. Допустим ли type assertion из одного интерфейса в другой и приведёт ли выполнение программы к ошибке времени выполнения или успешно вызовет соответствующие методы
gotype Foo struct{}
func (f *Foo) A() {}
func (f *Foo) B() {}
func (f *Foo) C() {}
type AB interface {
A()
B()
}
type BC interface {
B()
C()
}
func main() {
var a int
var f AB = &Foo{}
y := f.(BC) // сработает ли такой type-assertion?
y.A() // а этот вызов?
_ = y
}