Определение интерфейса
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 13 из 68.
Теперь, когда ты понимаешь, что такое интерфейсы на концептуальном уровне, давай узнаем, как фактически определить интерфейс в Go. Интерфейс определяется с помощью ключевого слова interface, за которым следует набор сигнатур методов, заключённых в фигурные скобки.
Вот базовый синтаксис для определения интерфейса:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Обратите внимание, что interface содержит только сигнатуры методов — имя метода, параметры и возвращаемые типы, — но не реализацию. interface не указывает, как должны работать эти методы, а только какие методы должны существовать.
Например, вот как можно определить простой интерфейс Shaper, который требует, чтобы любой реализующий его тип имел метод Area:
type Shaper interface {
Area() float64
}Этот интерфейс устанавливает контракт: любой тип, который должен считаться Shaper, должен иметь метод Area, не принимающий параметров и возвращающий значение типа float64. Интерфейс не заботится о том, чем является тип и как он вычисляет площадь, — его интересует только наличие метода с правильной сигнатурой.
Задание
ЛегкоВ этом задании ты потренируешься определять интерфейсы в Go, создав простую систему медиаплеера. Ты определишь interface, который устанавливает контракт для различных типов мультимедийных устройств.
Тебе будет предоставлен один входной параметр:
- строка, представляющая действие медиаплеера (например,
"play","pause"или"stop")
Твоя задача:
- Определить interface с именем
MediaPlayerс тремя сигнатурами методов:Play(), возвращающий stringPause(), возвращающий stringStop(), возвращающий string
- В зависимости от входного действия вывести соответствующую сигнатуру метода из твоего
MediaPlayerinterface в формате:"MediaPlayer interface requires: [MethodName]() string"
Оператор вывода должен отражать interface, который ты определил выше. Ты описываешь, какую сигнатуру метода interface MediaPlayer требует для указанного действия. Представь, что твоя программа проверяет и сообщает о собственном контракте interface.
Имена методов должны начинаться с заглавной буквы (быть экспортируемыми), поскольку они являются частью определения interface. Для входного значения "play" выведи "MediaPlayer interface requires: Play() string", для "pause" выведи "MediaPlayer interface requires: Pause() string", а для "stop" выведи "MediaPlayer interface requires: Stop() string".
Это задание посвящено фундаментальной концепции определения интерфейсов с сигнатурами методов и установлению контракта, которому должен соответствовать любой реализующий его тип.
Попробуйте сами
package main
import "fmt"
func main() {
// Прочитать ввод
var action string
fmt.Scanln(&action)
// TODO: Define your MediaPlayer interface here
// TODO: Напишите ваш код ниже для обработки действия и вывода требуемого результата
// Вывести результат
// Remember to print in format: "MediaPlayer interface requires: [MethodName]() string"
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведениеПотренируйтесь самостоятельно: Онлайн-компилятор Go