Перейти к содержимому
Задача · Итоговый проект · урок 7 из 7

Задача: склад

Напишите тип Inventory — склад, который считает единицы каждого товара. Храните количества в map[string]int, поле добавьте сами. Функция func NewInventory() *Inventory создаёт пустой склад, а методы такие:

  • func (inv *Inventory) Add(name string, qty int) кладёт на склад qty единиц товара name;
  • func (inv *Inventory) Take(name string, qty int) error забирает их и возвращает nil;
  • func (inv *Inventory) Count(name string) int возвращает, сколько единиц товара лежит на складе;
  • func (inv *Inventory) Names() []string возвращает названия товаров по алфавиту.

Заготовка объявляет две ошибки. Если товара name нет на складе, Take возвращает ErrUnknownItem, а если единиц меньше qty — ErrNotEnough; в обоих случаях склад не меняется.

  • после Add("apple", 5) и Add("apple", 3): Count("apple") → 8
  • когда Count("pear") равно 2: Take("pear", 3) → ErrNotEnough, а Count("pear") остаётся 2
  • после Add("pear", 2) и Add("apple", 5): Names() → [apple pear]

Ограничения: qty положительное; Count для неизвестного товара возвращает 0; товар, забранный целиком, исчезает со склада, и Names его не возвращает.

Не добавляйте лишних импортов, если в задаче это прямо не сказано.

inventory.go — go
go · строк: 30
Ctrl+Enter запуск · Esc выйти из редактора

Подпишись, чтобы пройти курс

Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.

Войти другим способом