Контест Middle Ошибки, defer, panic и recover обновлено
Банковские счета и sentinel-ошибки на Go
Условие
Обработайте операции со счетами. Изначально счетов нет.
open <id>: открыть счёт с балансом 0;deposit <id> <сумма>,withdraw <id> <сумма>;transfer <откуда> <куда> <сумма>;balance <id>: вывести баланс.
Успешные open, deposit, withdraw, transfer выводят ok. Ошибки выводятся строкой error: <текст>, проверки идут строго в этом порядке:
- сумма не больше 0:
invalid amount(для deposit, withdraw, transfer); - счёт не найден:
account not found(для transfer сначала проверяется «откуда», затем «куда»); - перевод самому себе:
same account; - не хватает денег:
insufficient funds; - открытие существующего счёта:
account exists.
Ввод: q (1 ≤ q ≤ 1000), затем q операций, суммы целые.
Пример
8
open a
open b
deposit a 100
withdraw a 30
transfer a b 50
balance a
balance b
withdraw b 60
ok
ok
ok
ok
ok
20
50
error: insufficient funds
Как подойти
Sentinel-ошибки, методы возвращают error, проверки до изменения состояния.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Чем %v отличается от %w в fmt.Errorf
Следующий вопрос
Валидация конфигурации со сбором всех ошибок на Go