Перейти к основному содержимому

Практика: Структуры и интерфейсы


Онлайн редактор кода для Go

Здесь вы можете попробовать свои силы в программировании на языке Go. Для этого мы предоставляем вам онлайн редактор кода, в котором вы можете написать свой код и запустить его.


❗️ При обновлении страницы код пропадёт, по этому, сохраните свой код куда-нибудь, если он важный.

Задание 1 — Супергерой с эпичным представлением

Задание 1: Супергерой

⏱️ Примерное время: 10-15 минут

Создай структуру Superhero с полями Name, Power, Level. Добавь метод Intro() string — эпичное представление.


Требования:

  • структура Superhero { Name string, Power string, Level int }
  • метод Intro() string с эмодзи и красивым текстом
  • в main создай 2–3 героя и выведи их Intro()

Пример вывода:

🦸‍♂️ Я — Superman! Моя сила: полёт. Уровень мощи: 95!

Задание 2 — Космический корабль с расчётами

Задание 2: Космический корабль

⏱️ Примерное время: 15-20 минут

Структура Spaceship с полями Name, Speed (км/с), Crew. Методы MaxDistance(hours float64) float64 и Info() string.


Требования:

  • метод MaxDistance(hours float64) float64Speed * hours
  • метод Info() string — красивая многострочная строка
  • в main создай корабль, выведи Info() и расстояние за 10 часов

Пример вывода:

🚀 Enterprise
Скорость: 30000 км/с
Экипаж: 150 человек
За 10 часов пролетит: 300000 км

Задание 3 — Встраивание: человек + сотрудник

Задание 3: Композиция через встраивание

⏱️ Примерное время: 15-20 минут

Структура Person + встроенная в Employee. Переопредели метод Greet().


Требования:

  • type Person struct { Name string; Age int }
  • метод Greet() string → "Привет, я %s, мне %d лет"
  • type Employee struct { Person; Position string; Salary float64 }
  • переопредели Greet() → "Здравствуйте, я %s, работаю %s"
  • в main покажи оба метода: emp.Greet() и emp.Person.Greet()

Пример вывода:

Здравствуйте, я Олег, работаю Senior Go Developer
Привет, я Олег, мне 40 лет

Задание 4 — Интерфейс Drawable: фигуры рисуются

Задание 4: Фигуры, которые рисуются

⏱️ Примерное время: 20-25 минут

Интерфейс Drawable с методом Draw(). Реализуй для Circle, Rectangle, Text. Напиши функцию RenderScene(objects ...Drawable).


Требования:

  • интерфейс Drawable { Draw() }
  • структуры: Circle {X, Y, R float64; Color string}, Rectangle {...}, Text {...}
  • метод Draw() выводит описание с эмодзи
  • функция RenderScene(objects ...Drawable) перебирает и вызывает Draw()
  • в main создай слайс фигур и вызови RenderScene

Пример вывода:

=== Рендерим сцену ===
⭕ Круг: центр (100,100), R=50, цвет red
▭ Прямоугольник: (200,150) 100×60, цвет blue
✍️ Текст: "Hello Go!" в (50,300), размер 24

Задание 5 — Type switch: универсальный describe

Задание 5: Универсальный describe с type switch

⏱️ Примерное время: 15-20 минут

Напиши функцию Describe(v any), которая через type switch выводит тип и значение.


Требования:

  • функция Describe(v any)
  • type switch на 6–8 типов (int, string, bool, float64, Person, []int, map[string]int, nil и т.д.)
  • для структур — выводи поля
  • default — выводи тип через %T

Пример вывода:

Это целое число: 42 (квадрат: 1764)
Это строка длиной 6: "Привет"
Это человек: Катя, 25 лет
Неизвестный тип: func()

Задание 6 — Красивый вывод всех объектов (Stringer)

Задание 6: Переопределение String() для всех структур

⏱️ Примерное время: 20-25 минут

Добавь метод String() string ко всем созданным структурам (Superhero, Spaceship, фигуры и т.д.). Теперь fmt.Println(объект) будет красивым.


Требования:

  • метод String() string с receiver по значению
  • используй fmt.Sprintf с эмодзи и данными
  • в main создай несколько объектов и выведи через fmt.Println(obj)
  • сравни вывод до и после добавления метода

Пример вывода:

👤 Алексей (30 лет)
🚀 Enterprise (30000 км/с, экипаж 150)
⭕ Круг: центр (100,100), R=50, цвет red

Задание 7 — Итоговое: Зоопарк животных

Задание 7: Зоопарк (итоговое)

⏱️ Примерное время: 30-45 минут

Создай систему зоопарка: животные говорят, двигаются и имеют вес. Используй интерфейсы, встраивание и String().


Требования:

  • базовая структура Animal { Name string; Weight float64 }
  • интерфейсы:
    • Speaker { Speak() string }
    • Mover { Move() string }
  • встраивание в конкретные животные
  • метод String() для красивого вывода
  • функция ZooReport(animals ...any) — type switch и вызов методов
  • в main создай 4–5 животных и выведи отчёт

Пример вывода:

=== Зоопарк ===
🐶 Собака (25 кг): Гав-гав! Бегает по двору.
🐱 Кот (4 кг): Мяу-мяу! Лазает по деревьям.
🐮 Корова (600 кг): Мууу! Жуёт траву.
подсказка

Структуры + интерфейсы — это сердце настоящего Go.
Пиши маленькие структуры, встраивай их, реализуй интерфейсы — и код станет красивым и гибким.