Menu
Coddy logo textTech

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

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

quiz iconПроверьте себя

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

quiz iconПроверьте себя

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

quiz iconПроверьте себя

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

challenge icon

Задание

Легко

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

Вы получите один входной параметр:

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

Ваша задача:

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

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

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