Глава 1: Введение в Live Reloading
Что такое Live Reloading?
Live reloading - это функция, которая позволяет вашей среде разработки отслеживать изменения в вашем коде и автоматически перезагружать ваше приложение. Когда вы сохраняете файл, инструмент live reload обнаруживает изменение, перестраивает приложение и перезапускает его. Это освобождает вас от ручного процесса остановки сервера, перестройки приложения и его повторного запуска после каждого изменения.
Преимущества Live Reloading для разработки на Go
Live reloading может значительно ускорить процесс разработки. Для разработчиков на Go, привыкших компилировать свой код перед его запуском, live reloading означает улучшенный рабочий процесс с мгновенной обратной связью. Преимущества включают в себя:
- Повышение производительности: Разработчики могут оставаться в зоне без прерываний, так как им не нужно выполнять ручную перестройку.
- Экономия времени: Live reloading уменьшает время ожидания для увидения изменений в коде в работающем приложении.
- Обнаружение ошибок: Мгновенные перестройки и перезапуски позволяют разработчикам быстрее обнаруживать и исправлять ошибки.
- Упрощенный рабочий процесс: Интегрируется плавно в процесс разработки, делая его более гладким и эффективным.
Глава 2: Что такое Air?
Air - это утилита командной строки, разработанная для предоставления возможностей live reloading для приложений на Go. Она отслеживает изменения в вашем исходном коде и автоматически перестраивает и перезапускает ваше приложение на Go. Это означает, что вы можете сосредоточиться больше на разработке функций и меньше на рутинных задачах.
Функции
Air предоставляет ряд функций, подходящих для современной среды разработки на Go:
- Автоматические перестройки: Обнаруживает изменения файлов и запускает перестройки.
- Настроенные команды сборки: Позволяет вам настраивать команды сборки в соответствии с потребностями вашего проекта.
- Исключение каталогов: Позволяет вам указывать каталоги, исключаемые из наблюдения.
- Поддержка новых каталогов: Может отслеживать новые каталоги, добавленные после запуска Air.
- Цветные и понятные журналы: Улучшает читабельность выходных журналов с помощью раскраски.
- Аргументы командной строки: Поля конфигурации могут быть установлены непосредственно через аргументы командной строки для быстрых настроек.
Обратитесь к предоставленному контексту разработчика для полного списка доступных функций и возможностей с Air.
Глава 3: Установка air
3.1 Установка через go install
Для установки Air с использованием инструментария Go версии 1.18 или выше:
go install github.com/cosmtrek/air@latest
Это сделает air
доступным в вашем GOPATH/bin
.
3.2 Использование скрипта install.sh
Другой метод - через предоставленный скрипт установки:
curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
После установки проверьте ее, запустив:
air -v
3.3 Специальные установки (Docker/Podman и пользовательский путь)
Для тех, кто использует Docker или Podman, существует упрощенный способ включения Air:
docker run -it --rm \
-w "/путь/к/проекту" \
-v $(pwd):/путь/к/проекту \
-p порт:порт \
cosmtrek/air
Замените /путь/к/проекту
на путь к вашему проекту, а порт:порт
- на желаемое отображение порта.
В качестве альтернативы для установки в определенный ПУТЬ:
curl -sSfL https://goblin.run/github.com/cosmtrek/air | PREFIX=/пользовательский/путь sh
Глава 4: Настройка air
для вашего проекта на Go
4.1 Понимание конфигурации .air.toml
.air.toml
- это файл конфигурации для Air. Он позволяет указать настройки, связанные с процессом сборки, мониторингом каталогов и выводом журналов. Вот краткий обзор основных разделов:
-
root
: Задает рабочий каталог для Air. -
build
: Содержит связанные с сборкой настройки, такие как команды для выполнения перед/после сборки и основная команда сборки. -
tmp_dir
: Каталог, в котором хранятся временные файлы сборки. -
log
: Настраивает параметры файла журнала. -
color
: Настраивает цвет каждой части вывода журнала.
4.2 Создание и изменение файла конфигурации
Для создания файла конфигурации по умолчанию .air.toml
выполните команду:
air init
Это создаст файл .air.toml
с настройками по умолчанию в вашем текущем каталоге. Затем вы можете изменить его, чтобы он соответствовал требованиям вашего проекта. Для справки вы можете посмотреть файл air_example.toml
, предоставленный в контексте.
4.3 Перезапись конфигурации с помощью аргументов командной строки
Для быстрых тестов или незначительных изменений вы можете переопределить конфигурацию в файле .air.toml
, передавая аргументы командной строки. Например:
air --build.cmd "go build -o myapp" --build.bin "./myapp"
Эта гибкость позволяет вам легко настраивать поведение Air без изменения файла конфигурации.
Глава 5: Запуск air
в вашей среде разработки
6.1 Запуск air
в вашем проекте
Чтобы начать работу с air
в вашем проекте, перейдите в корневой каталог вашего проекта в терминале и выполните команду air
. Если файл конфигурации .air.toml
присутствует, air
автоматически его использует. В противном случае он будет использовать настройки по умолчанию.
cd /путь/к/вашему_проекту
air
Совет: Если у вас возникают проблемы с разрешениями для исполняемого файла air
, убедитесь, что у него есть необходимые разрешения на выполнение (chmod +x $(go env GOPATH)/bin/air
).
6.2 Настройка команд сборки и запуска с air
Вы можете настраивать команды сборки и запуска, используемые air
, изменив файл конфигурации .air.toml
, в частности в разделе [build]
. Например, чтобы изменить команду сборки и указать другой бинарный файл:
[build]
cmd = "go build -o ./tmp/my-custom-binary ."
bin = "tmp/my-custom-binary"
Для более сложных требований сборки массивы pre_cmd
и post_cmd
в файле конфигурации позволяют выполнять команды до и после процесса сборки соответственно.
6.3 Исключение каталогов и отслеживание изменений
air
также позволяет исключать каталоги из отслеживания изменений, что может быть полезно для каталогов, содержащих ресурсы или зависимости, которые не должны вызывать пересборку.
Для настройки этого обновите поле exclude_dir
в файле .air.toml
:
[build]
exclude_dir = ["assets", "tmp", "vendor", "node_modules"]
Вы также можете указать include_dir
для включения дополнительных каталогов или include_ext
для отслеживания файлов с определенными расширениями.
Глава 6: Расширенное использование
6.1 Настройка air
с контейнерами Docker
Использование air
в контейнере Docker может упростить вашу среду разработки, особенно при работе в команде. Чтобы включить air
в ваше окружение Docker, обновите ваш Dockerfile
, чтобы установить air
и скопировать ваш .air.toml
в контейнер:
FROM golang:1.18-alpine AS builder
RUN go install github.com/cosmtrek/air@latest
WORKDIR /app
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
CMD ["air", "-c", ".air.toml"]
6.3 Использование air
в среде Docker-compose
Чтобы интегрировать air
в сервис, управляемый docker-compose
, определите сервис в вашем файле docker-compose.yaml
:
version: '3.8'
services:
app:
build: .
ports:
- "808:808"
volumes:
- .:/app
command: ["air", "-c", ".air.toml"]
Убедитесь, что директива volumes
правильно сопоставляет каталог вашего проекта с рабочим каталогом в контейнере, чтобы air
мог обнаруживать изменения файлов.
Глава 7: Общие проблемы и часто задаваемые вопросы
7.1 Исправление ошибки command not found: air
Если вы столкнулись с ошибкой command not found: air
, это обычно означает, что исполняемый файл air
не находится в переменной PATH
вашей системы. Чтобы исправить это, добавьте путь к исполняемым файлам Go в вашу переменную окружения PATH
:
export PATH=$PATH:$(go env GOPATH)/bin
7.2 Проблемы в средах WSL
В среде подсистемы Windows для Linux (WSL) убедитесь, что вы экранируете специальные символы в вашем .air.toml
. Например, используйте \\
для экранирования обратных слэшей в путях к файлам.
7.3 Советы по горячей компиляции без запуска бинарного файла
Если вы хотите, чтобы air
компилировал ваше приложение на Go без его запуска, установите cmd
в разделе [build]
вашего .air.toml
на команду без действия (например, /bin/true
в системах на основе Unix):
[build]
cmd = "/bin/true"
При этом air
по-прежнему будет отслеживать изменения в файлах и запускать процесс сборки, но не будет пытаться выполнить полученный бинарный файл.