Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpIfSI 29 of 280 menu
◀ ▶

Несколько интерфейсов в Go

Один тип может подходить сразу под несколько интерфейсов. У каждого интерфейса свой список методов, и тип должен закрыть каждый список отдельно. Лишние методы у типа не мешают: важно только наличие нужных имен и сигнатур.

Объявим два интерфейса и один документ с обоими действиями:

package main import "fmt" type Printer interface { Print() } type Saver interface { Save() } type Doc struct { Title string } func (d Doc) Print() { fmt.Println(d.Title) } func (d Doc) Save() { fmt.Println("saved", d.Title) } func main() { item := Doc{Title: "note"} var p Printer = item var s Saver = item p.Print() s.Save() }

Одна переменная item легла и в Printer, и в Saver. В каждой переменной интерфейса внутри тот же тип Doc и те же данные, но снаружи видны разные наборы методов.

Интерфейсы не связаны друг с другом: второй не «расширяет» первый в коде. Просто один тип может удовлетворять нескольким независимым спискам, если у него достаточно методов.

Даны интерфейсы Speaker с методом Speak и Walker с методом Walk. Запишите Robot с обоими методами и положите одно значение в переменные обоих интерфейсов.

Дан следующий код:

package main type A interface { DoA() } type B interface { DoB() } type Both struct{} func (b Both) DoA() {} func (b Both) DoB() {}

Создайте Both и запишите его в A и B в одной функции main.

Скажите, нужно ли в объявлении Doc перечислять имена интерфейсов, под которые он подходит.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить