Двадцать пятый урок курса по Go. Паника в обработчике не роняет сервер — она роняет ответ, и читатель не получает вообще ничего. recover одной прослойкой, номер обращения в странице и в журнале, log/slog вместо печати в консоль и почему после уже ушедшего ответа спасать поздно.
Двадцать четвёртый урок курса по Go. Сайт начинает выглядеть, а не только работать. http.FileServerFS, почему для файлов с диска нужен StripPrefix, а для встроенных нет, откуда берётся Content-Type, почему папка static видна целиком и почему встроенный файл браузер качает заново.
Двадцать третий урок курса по Go. Данные впервые идут в обратную сторону — от читателя к серверу. Метод и имена полей, r.FormValue, почему проверка в браузере не защита, и почему обработчик, который что-то изменил, отвечает редиректом, а не страницей: иначе F5 создаст вторую статью.
Двадцать второй урок курса по Go. HTML переезжает из кода в отдельный файл: точка как имя данных, range по срезу, if и else. Почему html/template сам обезвреживает чужой текст, зачем шаблоны разбирают один раз при старте и почему страницу собирают в буфер, а не сразу в ответ.
Двадцать первый урок курса по Go. Обёртка вокруг маршрутизатора делает одно и то же для каждого запроса: журнал, время ответа, проверка. Что такое http.Handler, почему обёртка берёт обработчик и возвращает обработчик, и как узнать код ответа, которого ResponseWriter не хранит.
Двадцатый урок курса по Go. ServeMux разводит запросы по обработчикам: метод и путь пишутся одной строкой, {slug} вынимает кусок адреса, {$} не даёт главной странице ловить всё подряд. Ошибки 404 и 405 маршрутизатор берёт на себя, а конфликт двух образцов ловит при запуске.
Девятнадцатый урок курса по Go и начало модуля о вебе. Запрос — это структура, которую можно прочитать: метод, путь, заголовки, параметры. Ответ уходит в одну сторону: заголовки, код, тело — и в этом порядке. Почему 404 и 405 разные и что значит superfluous WriteHeader.