Пока мы проводим рефакторинг кода, стоит внести еще одно изменение. Наша главная функция main()
становится немного переполненной.Чтобы она стала более компактной и легко читаемой, можно переместить объявления маршрутов для приложения в отдельный файл routes.go
. Например:
1 2 |
$ cd $HOME/code/snippetbox $ touch cmd/web/routes.go |
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package main import "net/http" func (app *application) routes() *http.ServeMux { mux := http.NewServeMux() mux.HandleFunc("/", app.home) mux.HandleFunc("/snippet", app.showSnippet) mux.HandleFunc("/snippet/create", app.createSnippet) fileServer := http.FileServer(http.Dir("./ui/static/")) mux.Handle("/static/", http.StripPrefix("/static", fileServer)) return mux } |
Теперь мы можем обновить файл main.go
следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
package main import ( "flag" "log" "net/http" "os" ) type application struct { errorLog *log.Logger infoLog *log.Logger } func main() { addr := flag.String("addr", ":4000", "Сетевой адрес веб-сервера") flag.Parse() infoLog := log.New(os.Stdout, "INFO\t", log.Ldate|log.Ltime) errorLog := log.New(os.Stderr, "ERROR\t", log.Ldate|log.Ltime|log.Lshortfile) app := &application{ errorLog: errorLog, infoLog: infoLog, } srv := &http.Server{ Addr: *addr, ErrorLog: errorLog, Handler: app.routes(), // Вызов нового метода app.routes() } infoLog.Printf("Запуск сервера на %s", *addr) err := srv.ListenAndServe() errorLog.Fatal(err) } |
Такой вариант выглядит аккуратнее. Маршруты для нашего приложения теперь изолированы и инкапсулированы в методе app.routes()
, а обязанности функции main()
сводятся к следующему:
- Парсинг настроек конфигурации среды выполнения для приложения;
- Установление зависимостей для обработчиков;
- Запуск HTTP-сервера.
Исходный код веб-приложения
В конце каждой статьи мы предоставляем готовый код веб-приложения на текущем этапе.
Скачать: snippetbox-14.zip
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»