Echo - это легкий, но полный веб-фреймворк на Go для создания RESTful API. Он быстрый и включает в себя связку промежуточного программного обеспечения для обработки всего цикла HTTP-запроса-ответа. Что касается рендеринга, он работает с любым механизмом шаблонов, но для простоты я использую стандартный пакет html / template. К концу статьи у нас будет настройка проекта вложенного шаблона Echo.
Если вы уже имеете представление о том, как работает Эхо, перейдите к разделу Использование вложенного шаблона.
Базовая настройка проекта Echo
Создайте папку проекта под правильным $ GOPATH
Полный код проекта размещен на GitLab. Сначала мы создадим здесь папку проекта: $ GOPATH / src / gitlab.com / ykyuen / golang-echo-template-example.
Создайте main.go
Во вновь созданной папке скопируем пример hello world с официального сайта Echo и создадим main.go.
main.go
Загрузите пакет Echo, используя dep
Просто запустите dep init, если dep установлен. Вы можете обратиться к этому сообщению для получения дополнительной информации о dep: Управление зависимостями Go с помощью dep.
Или запустите go get github.com/labstack/echo, чтобы загрузить пакет Echo в $ GOPATH.
Запустите привет мир
Запустите приложение, набрав go run main.go, а затем перейдите по адресу http: // localhost: 1323 в браузере или с помощью команды curl.
Вернуть ответ JSON
При создании RESTful API более вероятно, что клиент захочет получить ответ JSON вместо строки. Давайте напишем код Go в main.go.
main.go
Вернуть HTML
Как и при возврате объекта JSON, нам просто нужно вызвать другой метод в инструкции return.
main.go
Выше приведены лишь два простых примера. В Echo есть еще несколько удобных способов возврата JSON и HTML. Подробности смотрите в документации.
Рендеринг HTML с использованием шаблонизатора
Как упоминалось в самом начале, мы могли бы реализовать механизм шаблонов при возврате HTTP-ответа. Но перед этим давайте реструктурируем проект следующим образом:
main.go
В этом main.go мы определяем тип под названием TemplateRegistry и реализуем интерфейс Renderer. Средство визуализации - это простой интерфейс, который включает функцию Render (). Внутри экземпляра TemplateRegistry у него есть поле templates, содержащее все шаблоны, необходимые серверу Echo для отображения html-ответа, и это настраивается в главном () поток.
С другой стороны, мы определяем HomeHandler, чтобы хранить логику в отдельном файле.
handler / home_handler.go
Когда вызывается c.Render (), он выполняет шаблон, который уже установлен в нашем экземпляре TemplateRegistry, как указано в main.go. Три параметра:
- Код ответа HTTP
- Название шаблона
- Объект данных, который можно использовать в шаблоне.
view / home.html
Этот шаблон называется home.html, как указано в инструкции define. Он может читать строки name и msg из c.Render () для ‹title› и ‹H1› теги.
Использование вложенного шаблона
В приведенной выше настройке каждый шаблон HTML имеет полный набор HTML-кода, и многие из них дублируются. Использование вложенного шаблона упрощает сопровождение проекта.
Изначально поле шаблоны в TemplateRegistry содержало все файлы шаблонов. В новой настройке мы превращаем его в поле карты, и каждый элемент представляет собой единый набор файлов шаблонов для определенной HTML-страницы.
Добавляем в проект несколько файлов, и он должен выглядеть так:
Код ниже основан на этой сути, созданной rand99.
main.go
Мы добавляем новый маршрут / about, который обрабатывается AboutHandler. Как видно из строк 34–36 выше, шаблоны карта содержит разный набор файлов шаблонов для разных HTML-страниц. Render () принимает параметр name в качестве ключа карты templates, чтобы он мог выполнить правильный набор шаблонов.
view / base.html
Оператор template сообщает механизму шаблонов, что он должен искать определения {{title}} и {{body}} в наборе шаблонов. , и они определены в файлах home.html, а также about.html.
view / about.html
А вот AboutHanlder, который ничем не отличается от HomeHandler.
handler / about_handler.go
Резюме
Это просто базовый пример реализации вложенных шаблонов с использованием стандартной библиотеки Go html / template в Echo. При правильной настройке мы могли бы разработать более индивидуальный и удобный шаблон для Echo или даже заставить его работать с любыми другими шаблонизаторами.
Полный пример можно найти на gitlab.com.
- Изначально размещено в Блоге боцмана.