Ритуал, коммиты и словарик
Задания дня разложены по пяти каталогам. Перед последним коммитом — ритуал из дня 14: формат, vet, тесты по всему модулю сразу.
Ритуал по всему модулю
stagiaire@lab:~/gocourse/day16$ gofmt -l .
stagiaire@lab:~/gocourse/day16$ go vet ./...
stagiaire@lab:~/gocourse/day16$ go test ./...
? day16/fix1 [no test files]
? day16/fix2 [no test files]
ok day16/low (cached)
? day16/scratch [no test files]
? day16/stock [no test files]
? day16/trace [no test files]Как это читать. ./... — «этот каталог и все каталоги внутри»: одна команда проходит по всем заданиям. gofmt -l . и go vet ./... молчат — значит, замечаний нет. У go test ./... строка на каждый каталог: [no test files] — тестов там нет, это не ошибка; ok — тесты прошли; (cached) — код с прошлого прогона не менялся, и go test взял готовый результат вместо повторного запуска.
История дня
Каждое задание закончилось коммитом, и история читается как отчёт о дне — снизу вверх:
stagiaire@lab:~/gocourse/day16$ git log --oneline
01149b1 low: тест к lowCells
a6cd1e1 stock: отчёт по ячейкам
4cb4345 trace: таблица
0127af1 fix2: индексы с нуля
9d08b93 fix1: срез после append
620444c день 16: заготовкиХеши у вас другие. Забытое заберут git add . и git commit в конце, но задание, закоммиченное отдельно, легче найти: git show с его хешем.
Попробуйте сейчас: ритуал и коммиты.
Цель: весь модуль чист, работа дня лежит в истории.
1. Ритуал:
▶ Выполнитеcd ~/gocourse/day16 gofmt -l . go vet ./... go test ./...Если
gofmt -l .печатает имена файлов —gofmt -w .илиCtrl+Sв VS Code.2. Всё, что осталось незакоммиченным, — в историю:
▶ Выполнитеgit status -s git add . git commit -m "день 16: ритуал" git log --onelineЕсли
git status -sничего не печатает, коммитить нечего —git commitтак и скажет, это не ошибка.Готово, когда: пункты
code_fmtиgitзелёные: вstock,low,fix1,fix2код отформатирован иgo vetмолчит, а в истории не меньше четырёх коммитов с изменениями.
Словарик ошибок
Сегодня сообщения двух видов: компилятор (программа не собралась) и паника (собралась, но упала при запуске с кодом 2). В словарик идут оба. Допишите в ~/errors.md то, что встретили сами: слева текст ошибки, тире, справа разбор своими словами.
panic: runtime error: index out of range [3] with length 3 - цикл дошёл до i == len, последний индекс len-1
invalid operation: got != want (slice can only be compared to nil) - срезы сравнивают по длине и поэлементноК концу дня в словарике должно быть не меньше 32 разборов — записи за все дни считаются вместе. Разделитель — тире с пробелами, двоеточие не считается: оно есть в каждом сообщении. Сколько строк уже засчитывается, покажет та же команда, что в дне 13:
grep -E '.{20,}' ~/errors.md | grep -cE ' (-|—|–) ' — число в ответ.
Что стоит записать сегодня: index out of range у среза и out of bounds у массива, append(…) … is not used, invalid append, slice can only be compared to nil, а словами — «длина всё время 1: результат append ушёл в новую переменную».
Итог дня
- Индексы среза с 0 до
len(s)-1; номер для человека —i+1. s = append(s, x)— результат обратно в тот же срез.for i, v := range s; одна переменная вrange— индекс.- Выход за границу — паника
index out of rangeи код 2. - Элементы среза, изменённые в функции, видны снаружи; срезы сравнивают по длине и поэлементно.
Материал дня закончен. Задания — course lab 16, дополнительное чтение — course extra 16