Menu
Coddy logo textTech

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

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

challenge icon

Задание

Легко

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

Тебе будет предоставлен один входной параметр:

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

Твоя задача:

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

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

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

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