Menu
CoddyTech

Реализация интерфейса

Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 14 из 68.

Теперь, когда ты знаешь, как определить интерфейс, давай узнаем, как типы Go реализуют интерфейсы на практике. Важно понять, что Go использует неявную реализацию — для неё не нужны специальные ключевые слова или объявления.

Если у типа есть все методы, необходимые интерфейсу, он автоматически удовлетворяет этому интерфейсу. Не нужно явно указывать, что ваш тип реализует интерфейс: Go определит это за вас.

Вот как это работает с интерфейсом Shaper из предыдущего урока:

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14159 * c.Radius * c.Radius
}

Поскольку у типа Circle есть метод Area(), возвращающий значение типа float64, он автоматически реализует интерфейс Shaper. Нет необходимости объявлять эту связь явно — Go распознаёт её по совпадению сигнатуры метода.

Этот неявный подход делает интерфейсы Go невероятно гибкими. Любой существующий тип может удовлетворять новому интерфейсу, если у него есть необходимые методы, даже если интерфейс был создан после того, как тип уже был объявлен.

challenge icon

Задание

Легко

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

Тебе будут переданы два входных значения:

  • Строка, представляющая марку автомобиля (например, "Toyota")
  • Строка, представляющая скорость автомобиля в км/ч (например, "120")

Твоя задача:

  1. Определить интерфейс Vehicle с одной сигнатурой метода: GetInfo(), который возвращает строку
  2. Определить структуру Car с двумя полями: Brand (строка) и Speed (целое число)
  3. Реализовать метод GetInfo() для структуры Car, который возвращает строку в формате: "Brand: [brand], Speed: [speed] km/h"
  4. Разобрать входные значения, чтобы создать экземпляр Car
  5. Вызвать метод GetInfo() и вывести результат

Помни, что в Go структура Car автоматически реализует интерфейс Vehicle, поскольку у неё есть требуемый метод GetInfo() с правильной сигнатурой. Не нужно явно объявлять, что Car реализует Vehicle: Go распознаёт эту связь неявно.

Попробуйте сами

package main

import (
	"fmt"
	"strconv"
)

// TODO: 1. Определите интерфейс Vehicle с методом GetInfo(), возвращающим string

// TODO: 2. Определите структуру Car с полями Brand (string) и Speed (int)

// TODO: 3. Реализуйте метод GetInfo() для Car

func main() {
	// Считайте входные данные
	var brand string
	var speedStr string
	fmt.Scanln(&brand)
	fmt.Scanln(&speedStr)

	// Преобразуйте строку speed в целое число
	speed, _ := strconv.Atoi(speedStr)

	// TODO: 4. Создайте экземпляр Car, используя brand и speed, затем вызовите GetInfo()
	result := "" // замените эту строку своей реализацией
	_ = brand
	_ = speed

	// Выведите результат
	fmt.Println(result)
}
quiz iconПроверьте себя

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

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

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