Определение интерфейса
Часть раздела Логика и управление потоком путешествия по 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 для данного действия. Представьте это как проверку и отчет вашей программы о собственном контракте интерфейса.
Имена методов должны быть написаны с заглавной буквы (экспортируемыми), так как они являются частью определения интерфейса. Для ввода "play" выведите "MediaPlayer interface requires: Play() string", для "pause" выведите "MediaPlayer interface requires: Pause() string", а для "stop" выведите "MediaPlayer interface requires: Stop() string".
Это испытание сосредоточено на фундаментальной концепции определения интерфейсов с сигнатурами методов, устанавливающих контракт, который должен выполнить любой реализующий тип.
Шпаргалка
Интерфейс определяется с помощью ключевого слова interface, за которым следуют сигнатуры методов в фигурных скобках:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Интерфейсы содержат только сигнатуры методов (имя, параметры, типы возвращаемых значений), но не содержат реализации:
type Shaper interface {
Area() float64
}Любой тип, реализующий все методы интерфейса, автоматически удовлетворяет контракту этого интерфейса.
Попробуйте сами
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Сравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение