Golang веб-сайт: создание новостного портала

Начало работы: создание проекта

Создан пустой проект с файлом 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-файл и обработка главной страницы, реализовано динамическое подключение файлов и обработка статических файлов. В следующих уроках наполним веб-сайт контентом.

Что будем искать? Например,программа