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. Три параметра:

  1. Код ответа HTTP
  2. Название шаблона
  3. Объект данных, который можно использовать в шаблоне.

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.

- Изначально размещено в Блоге боцмана.