Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
4
Преобразование одного интерфейса в другой
Условие задачи
В примере есть тип Bar, у которого реализованы методы X(), Y() и Z(). На их основе объявлены два интерфейса: XY, требующий методов X() и Y(), и YZ, требующий методов Y() и Z(). Вопрос: можно ли выполнить приведение переменной типа XY к типу YZ?
type Bar struct{}
func (b *Bar) X() {}
func (b *Bar) Y() {}
func (b *Bar) Z() {}
type XY interface {
X()
Y()
}
type YZ interface {
Y()
Z()
}
func main() {
var b XY = &Bar{}
z := b.(YZ) // Сработает ли это приведение?
z.X() // А этот вызов?
_ = z
}
Опишите, как работает приведение интерфейсов в Go, какие условия должны быть выполнены, и что произойдёт при попытке вызвать метод, отсутствующий в целевом интерфейсе.