Начало работы: создание проекта
Создан пустой проект с файлом main.go. Он содержит стандартные настройки порта и функцию main. Предыдущие файлы проекта помещены в отдельную папку. Код из этой папки будет использоваться для реализации веб-сайта.
Базовый каркас веб-сайта
Импорт пакетов
Необходимо импортировать следующие пакеты:
- net/http
- html/template
Обработка главной страницы
Функция handleFunc обрабатывает запросы к главной странице:
func handleFunc(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "index.html")
}
Запуск локального сервера:
http.HandleFunc("/", handleFunc) // исправлено: используется handleFunc
http.ListenAndServe(":8080", nil)
Шаблонизация главной страницы (index)
Функция index вызывается при каждом переходе на главную страницу:
func index(w http.ResponseWriter, r *http.Request) {
tmpl, err := template.ParseFiles("templates/index.html")
if err != nil {
fmt.Fprintf(w, "Ошибка: %v", err)
return
}
tmpl.ExecuteTemplate(w, "index", nil)
}
Функция парсит файл templates/index.html с помощью template.ParseFiles. При ошибке выводится сообщение. ExecuteTemplate выполняет шаблон.
Структура HTML-шаблонов
Создадим файлы templates/index.html, templates/header.html и templates/footer.html. В index.html будет только основной контент, шапка и подвал вынесены в отдельные файлы. Для динамического подключения используем директиву define в HTML:
<!-- header.html -->
{{define "header"}}
<!-- Код шапки -->
{{end}}
<!-- footer.html -->
{{define "footer"}}
<!-- Код подвала -->
{{end}}
<!-- index.html -->
{{define "index"}}
{{template "header"}}
<!-- Основной контент страницы -->
{{template "footer"}}
{{end}}
В index.html подключаются блоки header и footer с помощью template.
Подключение статических файлов (CSS)
Создадим папку static/css и файл main.css. Обработка URL-адресов, начинающихся с /static, добавлена в функцию:
http.HandleFunc("/static/", func(w http.ResponseWriter, r *http.Request) {
http.StripPrefix("/static/", http.FileServer(http.Dir("static"))).ServeHTTP(w, r)
})
Эта функция удаляет префикс /static/ из URL и передает запрос к http.FileServer, который обслуживает файлы из папки static.
В этом уроке выполнены основные настройки проекта: созданы HTML-файлы, CSS-файл и обработка главной страницы, реализовано динамическое подключение файлов и обработка статических файлов. В следующих уроках наполним веб-сайт контентом.