/
Stormcoder
/
snippetbox
Обзор
Документация
Войти
/
Stormcoder
/
snippetbox
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
cmd/web/handlers.go
74 строки
3 KB
steryaev
Внедрение зависимостей в Golang (Dependency Injection)
01 окт 2025, 17:02
01 окт 2025, 17:02
ce94643
Код
Авторство
О чём код?
package main import ( "fmt" "html/template" "net/http" "strconv" ) // Меняем сигнатуры обработчика home, чтобы он определялся как метод // структуры *application. func (app *application) home(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } // Инициализируем срез содержащий пути к двум файлам. Обратите внимание, что // файл home.page.tmpl должен быть *первым* файлом в срезе. files := []string{ "./ui/html/home.page.html", "./ui/html/base.layout.html", "./ui/html/footer.partial.html", } // Используем функцию template.ParseFiles() для чтения файла шаблона. // Если возникла ошибка, мы запишем детальное сообщение ошибки и // используя функцию http.Error() мы отправим пользователю // ответ: 500 Internal Server Error (Внутренняя ошибка на сервере) ts, err := template.ParseFiles(files...) if err != nil { // Поскольку обработчик home теперь является методом структуры application // он может получить доступ к логгерам из структуры. // Используем их вместо стандартного логгера от Go. app.errorLog.Println(err.Error()) http.Error(w, "Internal Server Error", 500) return } // Затем мы используем метод Execute() для записи содержимого // шаблона в тело HTTP ответа. Последний параметр в Execute() предоставляет // возможность отправки динамических данных в шаблон. err = ts.Execute(w, nil) if err != nil { // Обновляем код для использования логгера-ошибок // из структуры application. app.errorLog.Println(err.Error()) http.Error(w, "Internal Server Error", 500) } } // Меняем сигнатуру обработчика showSnippet, чтобы он был определен как метод // структуры *application func (app *application) showSnippet(w http.ResponseWriter, r *http.Request) { id, err := strconv.Atoi(r.URL.Query().Get("id")) if err != nil || id < 1 { http.NotFound(w, r) return } fmt.Fprintf(w, "Отображение определенной заметки с ID %d...", id) } // Меняем сигнатуру обработчика createSnippet, чтобы он определялся как метод // структуры *application. func (app *application) createSnippet(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { w.Header().Set("Allow", http.MethodPost) http.Error(w, "Метод не дозволен", 405) return } w.Write([]byte("Создание новой заметки...")) }