Итоги: Пользовательские структуры данных
Часть раздела Основы путешествия по GO на Coddy — урок 101 из 109.
Задание
ЛегкоДавайте создадим простую пользовательскую структуру данных, чтобы закрепить то, что мы узнали о структурах в Go.
В этом испытании вы создадите базовую структуру данных Counter, которая может:
- Отслеживать значение счетчика
- Увеличивать счетчик
- Уменьшать счетчик
- Сбрасывать счетчик до нуля
Дополните код, реализовав недостающие методы для структуры Counter.
Попробуйте сами
package main
import (
"fmt"
)
// Counter — это простая структура данных счетчика
type Counter struct {
value int
name string
}
// NewCounter создает новый счетчик с заданным именем
func NewCounter(name string) Counter {
return Counter{
value: 0,
name: name,
}
}
// Increment увеличивает счетчик на 1
func (c *Counter) Increment() {
// Добавьте код для увеличения значения счетчика
}
// Decrement уменьшает счетчик на 1 (но не ниже 0)
func (c *Counter) Decrement() {
// Добавьте код для уменьшения значения счетчика
// Убедитесь, что значение не опускается ниже 0
}
// Reset сбрасывает счетчик обратно на 0
func (c *Counter) Reset() {
// Добавьте код для сброса счетчика на 0
}
// Value возвращает текущее значение счетчика
func (c Counter) Value() int {
// Добавьте код для возврата текущего значения
return 0 // Замените это
}
// String возвращает строковое представление счетчика
func (c Counter) String() string {
return fmt.Sprintf("%s: %d", c.name, c.value)
}
func main() {
// Создаем новый счетчик с именем "Visitors"
visitors := NewCounter("Visitors")
// Увеличиваем счетчик несколько раз
visitors.Increment()
visitors.Increment()
visitors.Increment()
// Выводим текущее значение счетчика
fmt.Println(visitors)
fmt.Println("Current value:", visitors.Value())
// Уменьшаем счетчик
visitors.Decrement()
fmt.Println(visitors)
// Сбрасываем счетчик
visitors.Reset()
fmt.Println(visitors)
// Проверяем, что счетчик не опускается ниже нуля
visitors.Decrement()
fmt.Println(visitors)
}Все уроки раздела Основы
4Операторы сравнения и логические операторы
Операторы сравнения — Часть 1Операторы сравнения — Часть 2Логический оператор ANDЛогический оператор ORЛогический оператор NOTОсновы приоритета операторовИтоги: выполнение сравнений7Управляющие конструкции: Циклы
Что такое цикл `for`Цикл `for` — основыЦикл `for` — только условиеКлючевое слово `break`Ключевое слово `continue`Вложенные циклыИтоги — повторение действий10Составные типы: Массивы
Введение в массивыОбъявление массивовИнициализация массивовДоступ к элементам массиваДлина массива с `len`Итерация по массивамМногомерные массивы13Составные типы: Структуры
Определение пользовательских типовСоздание экземпляров структурДоступ к полям структурУказатели на структурыИнициализация структурВложенные структурыАнонимные структурыИтоги: Пользовательские структуры данных2Переменные и базовые типы данных
Что такое переменнаяВывод типов с помощью `:=`Целые числа (int)Числа с плавающей точкойЛогический тип (Booleans)СтрокиНулевые значения (Zero Values)КонстантыПравила именованияИтоги: переменные и типы5Основы ввода-вывода
Форматированный выводСпецификаторы форматаВывод типовБазовый ввод данных пользователемИтоги: ввод и вывод8Функции
Понимание функцийОбъявление функцииВызов функцийПараметры функцииВозврат одного значенияВозврат нескольких значенийИменованные возвращаемые значенияОсновы области видимости функцийИтоги — создание переиспользуемого кода3Базовые операторы
Арифметические операторыОператор деленияОператор остатка от деленияОператор присваиванияКомбинированные операторы присваиванияИнкремент и декрементПовторение — Вычисления6Управление потоком: Условные конструкции
Оператор `if`Ключевое слово `else`Ключевое слово `else if`Затенение переменных в `if`Инициализация переменныхОператор `switch`Switch с выражениямиSwitch без выраженийКлючевое слово `fallthrough`Итоги — Принятие решений