Sobes.tech
Junior — Senior
49

Проверка возможности приведения одного интерфейса к другому в Go

Условие задачи

Нужно понять, какой результат получит программа. Вопрос: допустимо ли выполнить type assertion от одного интерфейса к другому и приведёт ли это к панике во время выполнения или же методы будут успешно вызваны.

type 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
}