Определение интерфейса
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 13 из 68.
Теперь, когда ты понимаешь, что такое интерфейсы, давай узнаем, как определить интерфейс в Go. Интерфейс определяется с помощью ключевого слова interface, за которым следует набор сигнатур методов в фигурных скобках.
Вот базовый синтаксис определения интерфейса:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Обрати внимание, что интерфейс содержит только сигнатуры методов — имя метода, параметры и типы возвращаемых значений, — но не их реализации. Интерфейс не указывает, как должны работать эти методы, а только определяет, какие методы должны существовать.
Например, вот как можно определить простой интерфейс Shaper, который требует, чтобы у любого реализующего его типа был метод Area:
type Shaper interface {
Area() float64
}Этот интерфейс устанавливает контракт: любой тип, который хочет считаться Shaper, должен иметь метод Area, который не принимает параметров и возвращает значение типа float64. Интерфейсу не важно, что это за тип и как он вычисляет площадь: важно лишь, чтобы метод существовал и имел правильную сигнатуру.
Задание
ЛегкоВ этом задании ты потренируешься определять интерфейсы в Go, создав простую систему медиаплеера. Ты определишь интерфейс, который устанавливает контракт для разных типов мультимедийных устройств.
Тебе будет предоставлен один входной параметр:
- Строка, представляющая действие медиаплеера (например,
"play","pause"или"stop")
Твоя задача:
- Определить интерфейс с именем
MediaPlayerс тремя сигнатурами методов:Play(), который возвращает строкуPause(), который возвращает строкуStop(), который возвращает строку
- В зависимости от входного действия вывести соответствующую сигнатуру метода из интерфейса
MediaPlayerв формате:"MediaPlayer interface requires: [MethodName]() string"
В этой программе пока нигде не используется MediaPlayer, и это нормально: Go компилирует интерфейс, даже если ни один тип его не реализует. Операторы вывода просто сообщают сигнатуру метода, которую требует твой интерфейс для заданного действия. В следующем уроке ты создашь тип, реализующий MediaPlayer, и вызовешь его методы.
Названия методов должны начинаться с заглавной буквы (быть экспортируемыми), поскольку они являются частью определения интерфейса. Для входного значения "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: Определите здесь интерфейс MediaPlayer
// TODO: Напишите ниже код для обработки действия и вывода требуемого результата
// Выведите результат
// Не забудьте вывести результат в формате: "MediaPlayer interface requires: [MethodName]() string"
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком
Оператор switch с `fallthrough`Выход из вложенных цикловПереход к следующей итерации конкретного циклаОператор `goto`Повторение: расширенное управление циклами4Проект: простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели-значенияПолучатели-указателиВыбор получателейМетоды и функцииПовторение: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картПовторение — счётчик частоты слов8Проект: простой складской учёт
Обзор проектаПроверка запасов3Интерфейсы (основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование типов интерфейсовПустой интерфейсУтверждения типовПереключатель типовПовторение — формы и поведениеПотренируйтесь самостоятельно: Онлайн-компилятор Go