Menu
CoddyTech

Определение интерфейса

Часть раздела Логика и управление потоком путешествия по 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. Интерфейсу не важно, что это за тип и как он вычисляет площадь, — важно только, чтобы существовал метод с правильной сигнатурой.

challenge icon

Задание

Легко

В этом задании ты потренируешься определять интерфейсы в Go, создав простую систему медиаплеера. Ты определишь интерфейс, который задаёт контракт для разных типов медиаплееров.

На вход будет подано одно значение:

  • Строка, представляющая действие медиаплеера (например, "play", "pause" или "stop")

Твоя задача:

  1. Определить интерфейс с именем MediaPlayer с тремя сигнатурами методов:
    • Play(), который возвращает строку
    • Pause(), который возвращает строку
    • Stop(), который возвращает строку
  2. В зависимости от входного действия вывести соответствующую сигнатуру метода из интерфейса 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"
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Go