Chương 1: Giới thiệu về Live Reloading

Live Reloading là gì?

Live reloading là một tính năng cho phép môi trường phát triển của bạn theo dõi sự thay đổi trong mã nguồn của bạn và tự động tải lại ứng dụng của bạn. Khi bạn lưu một tệp, công cụ live reload sẽ phát hiện sự thay đổi, xây dựng lại ứng dụng và khởi động lại nó. Điều này giúp bạn tránh được quá trình thủ công của việc dừng máy chủ, xây dựng lại ứng dụng và khởi động lại nó sau mỗi sự thay đổi.

Lợi ích của Live Reloading cho phát triển Go

Live reloading có thể tăng đáng kể tốc độ phát triển. Đối với các nhà phát triển Go, người ta đã quen với việc biên dịch mã nguồn trước khi chạy nó, live reloading có nghĩa là quy trình làm việc cải thiện với phản hồi ngay lập tức. Các lợi ích bao gồm:

  1. Tăng năng suất: Nhà phát triển có thể duy trì trong vùng mà không bị gián đoạn, vì họ không cần thực hiện việc xây dựng lại thủ công.
  2. Tiết kiệm thời gian: Live reloading giảm thời gian đáp ứng để thấy các thay đổi mã được phản ánh trong ứng dụng đang chạy.
  3. Phát hiện lỗi: Xây dựng và khởi động lại ngay lập tức cho phép nhà phát triển phát hiện và sửa lỗi nhanh hơn.
  4. Quy trình làm việc hiệu quả: Tích hợp trơn tru vào quy trình phát triển, làm cho nó mượt mà và hiệu quả hơn.

Chương 2: Air là gì?

Air là một tiện ích dòng lệnh được thiết kế để cung cấp khả năng live reloading cho các ứng dụng Go. Nó theo dõi sự thay đổi trong mã nguồn của bạn và tự động xây dựng lại và khởi động lại ứng dụng Go của bạn. Điều này có nghĩa là bạn có thể tập trung hơn vào việc phát triển tính năng và ít hơn vào các công việc lặp đi lặp lại.

Các tính năng

Air cung cấp một loạt các tính năng phù hợp cho môi trường phát triển Go hiện đại:

  • Xây dựng tự động: Phát hiện sự thay đổi tệp và kích hoạt xây dựng lại.
  • Lệnh Xây dựng có thể Tùy chỉnh: Cho phép bạn tùy chỉnh các lệnh xây dựng theo nhu cầu dự án của bạn.
  • Loại Trừ Thư mục: Cho phép bạn chỉ định các thư mục cần loại trừ khỏi quá trình theo dõi.
  • Hỗ trợ cho Thư mục Mới: Có thể theo dõi các thư mục mới được thêm sau khi Air đã được khởi động.
  • Bảng Ghi Màu sắc và Dễ đọc: Nâng cao tính đọc hiểu của bảng ghi đầu ra với mã màu.
  • Đối số CLI: Các trường cấu hình có thể được thiết lập trực tiếp thông qua đối số dòng lệnh để điều chỉnh nhanh chóng.

Vui lòng tham khảo văn bản được cung cấp bởi nhà phát triển để biết danh sách đầy đủ các tính năng và chức năng có sẵn với Air.

Chương 3: Cài đặt air

3.1 Cài đặt qua go install

Để cài đặt Air bằng cách sử dụng công cụ Go phiên bản 1.18 trở lên:

go install github.com/cosmtrek/air@latest

Điều này sẽ làm cho air sẵn có trong GOPATH/bin của bạn.

3.2 Sử dụng tập lệnh install.sh

Một phương pháp khác là thông qua tập lệnh cài đặt được cung cấp:

curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

Sau khi cài đặt, hãy xác minh nó bằng cách chạy:

air -v

3.3 Cài đặt Đặc biệt (Docker/Podman và Đường dẫn Tùy chỉnh)

Đối với những người sử dụng Docker hoặc Podman, có một cách tiết kiệm thời gian để bao gồm Air:

docker run -it --rm \
    -w "/đường/dẫn/đến/dự/án" \
    -v $(pwd):/đường/dẫn/đến/dự/án \
    -p port:port \
    cosmtrek/air

Thay thế /đường/dẫn/đến/dự/án bằng đường dẫn dự án của bạn và port:port bằng ánh xạ cổng mong muốn.

Hoặc, đối với cài đặt đường dẫn cụ thể:

curl -sSfL https://goblin.run/github.com/cosmtrek/air | PREFIX=/đường/dẫn/tùy/chọn sh

Chương 4: Cấu hình air cho Dự án Go của bạn

4.1 Hiểu về Cấu hình .air.toml

.air.toml là tệp cấu hình cho Air. Nó cho phép bạn chỉ định các thiết lập liên quan đến quy trình xây dựng, theo dõi thư mục và đầu ra bảng ghi. Đây là một tổng quan ngắn gọn về các phần chính:

  • root: Đặt thư mục làm việc cho Air.
  • build: Chứa các thiết lập liên quan đến xây dựng như các lệnh chạy trước/sau khi xây dựng, và lệnh xây dựng chính.
  • tmp_dir: Thư mục nơi các tệp xây dựng tạm thời được lưu trữ.
  • log: Cấu hình các thiết lập tệp bảng ghi.
  • color: Tùy chỉnh màu sắc của từng phần của đầu ra bảng ghi.

4.2 Tạo và Sửa Đổi Tệp Cấu Hình

Để tạo tệp cấu hình mặc định .air.toml, hãy chạy lệnh:

air init

Điều này sẽ tạo một tệp .air.toml với các thiết lập mặc định trong thư mục hiện tại của bạn. Bạn có thể sửa đổi nó để phù hợp với yêu cầu dự án của mình. Để tham khảo, bạn có thể xem air_example.toml được cung cấp trong ngữ cảnh.

4.3 Ghi Đè Cấu Hình với Đối Số CLI

Đối với các bài kiểm tra nhanh hoặc các thay đổi nhỏ, bạn có thể ghi đè cấu hình trong .air.toml bằng cách truyền các đối số CLI. Ví dụ:

air --build.cmd "go build -o myapp" --build.bin "./myapp"

Sự linh hoạt này cho phép bạn dễ dàng tùy chỉnh hành vi của Air mà không cần thay đổi tệp cấu hình.

Chương 5: Chạy air trong Môi Trường Phát Triển Của Bạn

6.1 Bắt Đầu air trong Dự Án Của Bạn

Để bắt đầu với air trong dự án của bạn, hãy di chuyển đến thư mục gốc của dự án trong cửa sổ terminal của bạn và thực thi lệnh air. Nếu có tệp cấu hình .air.toml, air sẽ tự động sử dụng nó. Nếu không, nó sẽ sử dụng các thiết lập mặc định.

cd /đường/dẫn/đến/dự_án_của_bạn
air

Mẹo: Nếu bạn gặp vấn đề về quyền với tệp thực thi air, đảm bảo rằng nó có đủ quyền thực thi cần thiết (chmod +x $(go env GOPATH)/bin/air).

6.2 Tùy Chỉnh Lệnh Xây Dựng và Chạy với air

Bạn có thể tùy chỉnh các lệnh xây dựng và chạy được sử dụng bởi air bằng cách sửa đổi tệp cấu hình .air.toml, cụ thể là trong phần [build]. Ví dụ, để thay đổi lệnh xây dựng và chỉ định một tệp nhị phân khác:

[build]
cmd = "go build -o ./tmp/my-custom-binary ."
bin = "tmp/my-custom-binary"

Đối với yêu cầu xây dựng phức tạp hơn, các mảng pre_cmdpost_cmd trong tệp cấu hình cho phép bạn thực thi các lệnh trước và sau quá trình xây dựng, tương ứng.

Mẹo: Một ví dụ hoàn chỉnh về cấu hình air

6.3 Loại Bỏ Thư Mục và Theo Dõi Các Thay Đổi

air cũng cho phép bạn loại bỏ các thư mục không cần theo dõi thay đổi, điều này có thể hữu ích cho các thư mục chứa tài sản hoặc phụ thuộc mà không cần kích hoạt quá trình xây dựng lại.

Để cấu hình điều này, cập nhật trường exclude_dir trong .air.toml:

[build]
exclude_dir = ["assets", "tmp", "vendor", "node_modules"]

Bạn cũng có thể chỉ định thêm thư mục sử dụng include_dir, hoặc theo dõi các phần mở rộng tệp cụ thể bằng include_ext.

Chương 6: Sử Dụng Nâng Cao

6.1 Thiết Lập air với Docker Containers

Sử dụng air trong một container Docker có thể tối ưu hóa thiết lập phát triển của bạn, đặc biệt khi làm việc với các nhóm. Để bao gồm air trong môi trường Docker của bạn, cập nhật Dockerfile của bạn để cài đặt air và sao chép tệp .air.toml vào container của bạn:

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 Sử Dụng air trong Môi Trường Docker-compose

Để tích hợp air vào dịch vụ được quản lý bởi docker-compose, xác định một dịch vụ trong tệp docker-compose.yaml của bạn:

version: '3.8'
services:
  app:
    build: .
    ports:
      - "808:808"
    volumes:
      - .:/app
    command: ["air", "-c", ".air.toml"]

Đảm bảo rằng chỉ thị volumes ánh xạ đúng thư mục dự án của bạn vào thư mục làm việc trong container để air có thể phát hiện được sự thay đổi tệp.

Chương 7: Sửa Lỗi Thông Thường và FAQs

7.1 Sửa Lỗi command not found: air

Nếu bạn gặp phải lỗi command not found: air, thì thông thường điều này có nghĩa là tệp nhị phân air không nằm trong PATH của hệ thống của bạn. Để khắc phục điều này, hãy thêm đường dẫn tệp nhị phân Go vào biến môi trường PATH của bạn:

export PATH=$PATH:$(go env GOPATH)/bin

7.2 Vấn đề trong môi trường WSL

Trong môi trường Windows Subsystem for Linux (WSL), hãy đảm bảo rằng bạn đang escape các ký tự đặc biệt trong tệp .air.toml. Ví dụ, sử dụng \\ để escape các dấu gạch chéo ngược trong đường dẫn tệp.

7.3 Mẹo về Biên dịch Nhanh mà Không Chạy Tệp Nhị Phân

Nếu bạn muốn air biên dịch ứng dụng Go của bạn mà không chạy nó, hãy đặt cmd trong phần [build] của tệp .air.toml của bạn thành một lệnh no-operation (như /bin/true trên hệ thống dựa trên Unix):

[build]
cmd = "/bin/true"

Bằng cách làm này, air vẫn sẽ quan sát sự thay đổi tệp và kích hoạt quá trình biên dịch, nhưng nó sẽ không thử thực thi tệp nhị phân kết quả.