День 15 — глубже
Всё здесь необязательно. Материалы на английском помечены.
Про функции и разбиение
- Effective Go, раздел Functions (англ.) — https://go.dev/doc/effective_go#functions Несколько результатов, именованные результаты,
defer— последнее встретится в блоке 5. - Go by Example: Multiple Return Values (англ.) — https://gobyexample.com/multiple-return-values Короткий пример на одну страницу; рядом —
Functions,Errors. - Приём «выделение функции» (англ.) — https://refactoring.com/catalog/extractFunction.html Каталог приёмов рефакторинга. Тот самый шаг, который вы делали в задаче 3, описан как отдельный приём с условиями применения.
Про тесты
- Пакет testing (англ.) — https://pkg.go.dev/testing Читается и локально:
go doc testing.T,go doc testing.T.Errorf. - Go Wiki: TableDrivenTests (англ.) — https://go.dev/wiki/TableDrivenTests Тот же табличный тест, что в памятке, с объяснением, почему в Go он стал основной формой.
- Go blog: Using Subtests and Sub-benchmarks (англ.) — https://go.dev/blog/subtests Про
t.Run: каждый случай таблицы становится отдельным подтестом, и в отчёте видно имя упавшего случая.
Про git
- Pro Git, глава 2 «Основы Git» (по-русски) — https://git-scm.com/book/ru/v2 Первые две главы — ровно то, чем вы пользуетесь в блоке 3.
- git diff по-человечески —
git diff --statпокажет только имена файлов и число изменённых строк,git diff --word-diff— различия внутри строки.
Мини-опыты
- В
kt4скопируйте папку в черновик и испортитеorderCostсами: уберите скидку, сдвиньте границу на единицу, поменяйте местами умножение и деление. Какие из этих порч ваш тест ловит, а какие нет? Это и есть ответ на вопрос, насколько тест полон. - Запустите
go test -v ./...из~/gocourse/day15: команда обойдёт все папки дня и покажет каждый тест по имени. Три точки значат «этот каталог и все вложенные». - Посмотрите, как выглядит история:
git log --oneline --statпечатает для каждого коммита список файлов. По ней видно, коммитили вы по шагам или всё разом в конце. - Уберите из
kt5один случай таблицы и запустите проверку ещё раз. Какой случай можно убрать без потери, а какой — нельзя?