Практика: Структуры и интерфейсы
Онлайн редактор кода для 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) float64→Speed * 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.
Пиши маленькие структуры, встраивай их, реализуй интерфейсы — и код станет красивым и гибким.