Air是一个命令行实用程序,专为在开发过程中实时重新加载Go应用程序而设计。它是一种工具,使Go应用程序能够实时重新加载。

在编码时,实时重新加载可以让开发人员实时查看他们的更改。这样可以节省时间,因为无需在更改后手动停止和重新启动服务器。某些Go live重新加载框架可以在源代码更改后自动重新加载您的应用程序。本文将演示如何使用Air库在Go中实时重新加载。

Golang Air图书馆简介

Air是一个命令行实用程序,专为在开发过程中实时重新加载Go应用程序而设计。它是一种工具,使Go应用程序能够实时重新加载。

除了Air之外,Go的其他知名实时充值框架包括Fresh和Realize。它们的运行方式类似,在检测到源代码更改时自动重新生成并重新启动应用程序。

  • Fresh是一个命令行工具,旨在与任何Go Web服务器一起使用,轻松集成到您的构建过程中。
  • Realize是一个基于Go的构建系统,为Go应用程序提供实时重新加载功能。

鉴于这些选项在功能上的相似性,在Go项目中使用哪个框架的选择很大程度上取决于个人喜好。对每一种方法进行试验,以确定哪种方法对您的工作流程最直接或最直观。

什么是实时充值?

实时重新加载是一项开发功能,每当您更改源代码时,它都会自动刷新应用程序或服务器。它在开发和调试期间特别有用,因为它消除了每次修改代码时手动停止和重新启动应用程序的需要。

何时实施实时重载?

实时重新加载在各种情况下都是有益的,包括:

网站开发

实时重新加载通常用于 Web开发,用于客户端(HTML、CSS、JavaScript)和服务器端(后端代码)更改。保存文件时,网页会自动刷新以反映最新更改,而无需手动刷新。

前端框架

React、Angular和Vue等前端框架通常带有内置或易于集成的工具,支持实时重新加载。这加快了开发过程,并允许开发人员立即看到用户界面的变化。

后端开发

在后端开发期间,当对服务器端代码进行更改时,实时重载可用于自动重新启动服务器。这在 Express (Node.js)、Django (Python) 等框架中很常见。

跨平台开发

实时重新加载在跨平台开发场景中很有价值,例如使用 React Native或Flutter 等框架进行移动应用程序开发。对代码的更改可能会在连接的设备或仿真器上触发自动更新。

Go语言 (Golang)

Go编程语言在开发过程中对实时重载有很好的支持。像ginfreshair这样的工具在Go社区中很受欢迎。它们监控代码更改并自动重新构建和重新启动Go应用程序,从而提供无缝的开发体验。

使用示例:gin

go get -u github.com/codegangsta/gin
gin run main.go

使用示例:air

go get -u github.com/cosmtrek/air
air

Go中的实时重载与热重载

在Go中,术语"实时重新加载"是指无需手动停止和重新启动即可自动刷新和更新应用程序的能力。

一个称为"热重载"的类似概念专门涉及在应用程序仍在运行时更新其代码,而不会中断其当前状态或任何正在进行的进程。

实时重载和热重载在开发中都是有利的,可以更快地迭代和测试代码更改,而无需手动中断和重新启动。根据应用程序的复杂性,实现热重载可能不可行,或者可能会带来更多挑战。

Go和Gin项目缺乏对实时重新加载功能的固有支持。因此,让我们探讨一下如何配置Air库以在Go和Gin项目中实现实时重载。

将Golang Air与Gin Gonic一起使用的6个步骤

第1步:安装Gin Gonic和Air

打开终端并运行以下命令以安装Gin Gonic和Air:

# Install Gin Gonic
go get -u github.com/gin-gonic/gin
# Install Air
go get -u github.com/cosmtrek/air

第2步:创建一个简单的杜松子酒应用程序

创建一个新文件,以以下内容命名:main.go

// main.go
package main

import (
"github.com/gin-gonic/gin"
)

func main() {
// Create a new Gin router
router := gin.Default()

// Define a route
router.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello, Gin!",
})
})

// Run the server on port 8080
router.Run(":8080")
}

步骤3:创建Air配置文件

创建一个包含以下内容的文件:air.toml

# air.toml
root = "."
tmp_dir = "tmp"
build_cmd = "go build -o ./tmp/main ."
run_cmd = "./tmp/main"

步骤4:使用Air运行应用程序

在终端中,导航到项目目录并使用Air运行应用程序:

air

这将启动您的杜松子酒应用程序并实时重新加载。当您更改代码并保存文件时,Air将自动检测更改并重新启动服务器。

步骤5:测试应用程序

打开您的网络浏览器并转到 http://localhost:8080。您应该会看到JSON响应:

{"message":"Hello, Gin!"}

第6步:进行更改并查看实时重新加载的实际操作

对文件main.go进行一些更改,保存它,并观察Air如何自动重新启动服务器。检查浏览器以查看更新的响应,而无需手动重新启动应用程序。

将Golang Air与Echo一起使用的6个步骤

第1步:安装Echo和Air

打开终端并运行以下命令以安装Echo和Air:

# Install Echo
go get -u github.com/labstack/echo/v4

# Install Air
go get -u github.com/cosmtrek/air

步骤2:创建简单的Echo应用程序

创建一个新文件main.go,以以下内容命名:

// main.go
package main

import (
"github.com/labstack/echo/v4"
"net/http"
)

func main() {
// Create a new Echo instance
e := echo.New()

// Define a route
e.GET("/", func(c echo.Context) error {
return c.JSON(http.StatusOK, map[string]string{
"message": "Hello, Echo!",
})
})

// Start the server on port 8080
e.Start(":8080")
}

步骤3:创建Air配置文件

创建一个包含以下内容的文件:air.toml

# air.toml
root = "."
tmp_dir = "tmp"
build_cmd = "go build -o ./tmp/main ."
run_cmd = "./tmp/main"

步骤4:使用Air运行应用程序

在终端中,导航到项目目录并使用Air运行应用程序:

air

步骤5:测试应用程序

打开您的网络浏览器并转到 http://localhost:8080。您应该会看到JSON响应:

{"message":"Hello, Echo!"}

第6步:进行更改并查看实时重新加载的实际操作

如上。

将空气与纤维一起使用的6个步骤

第1步:安装光纤和空气

打开终端并运行以下命令以安装Fiber and Air:

# Install Fiber
go get -u github.com/gofiber/fiber/v2
# Install Air
go get -u github.com/cosmtrek/air

步骤2:创建简单的光纤应用程序

创建一个新文件,以以下内容命名:main.go

// main.go
package main

import (
"github.com/gofiber/fiber/v2"
)

func main() {
// Create a new Fiber instance
app := fiber.New()

// Define a route
app.Get("/", func(c *fiber.Ctx) error {
return c.JSON(map[string]string{
"message": "Hello, Fiber!",
})
})

// Start the server on port 8080
app.Listen(":8080")
}

步骤3:创建Air配置文件

创建一个包含以下内容的文件:air.toml

# air.toml
root = "."
tmp_dir = "tmp"
build_cmd = "go build -o ./tmp/main ."
run_cmd = "./tmp/main"

步骤4:使用Air运行应用程序

在终端中,导航到项目目录并使用Air运行应用程序:

air

这将通过实时重新加载启动您的光纤应用程序。当您更改代码并保存文件时,Air将自动检测更改并重新启动服务器。

步骤5:测试应用程序

打开您的网络浏览器并转到 http://localhost:8080。您应该会看到JSON响应:

{"message":"Hello, Fiber!"}

第6步:进行更改并查看实时重新加载的实际操作

如上。

将Golang Air与Docker容器一起使用的4个步骤

在Go应用程序中使用 Docker容器的实时重载的主要好处之一是,它允许您快速迭代代码,而无需每次都停止和启动容器。

这在容器中制作和验证应用程序时变得特别有利,有助于快速、轻松地识别和解决问题。

若要将实时重载库与Docker集成,必须在Docker容器中为本地源代码目录建立卷挂载。此设置使Air库能够监视代码更改,并根据需要自主刷新服务器。

第1步:使用安装和运行Air的说明创建一个Dockerfile

FROM golang:latest

# Set the current working directory inside the container
WORKDIR /app

# Copy go.mod and go.sum files to the workspace
COPY go.mod go.sum ./

# Download all dependencies
RUN go mod download

# Copy the source from the current directory to the workspace
COPY . .

# Build the Go app
RUN go build -o main .

# Expose port 8080 to the outside world
EXPOSE 8080

# Command to run the executable
CMD ["air"]

第2步:创建文件.air.toml

在项目的根目录中创建一个包含以下内容的文件:.air.toml

root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"

[build]
args_bin = []
bin = "./tmp/main"
cmd = "go build -o ./tmp/main ."
delay = 1000
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
exclude_file = []
exclude_regex = ["_test.go"]
exclude_unchanged = false
follow_symlink = false
full_bin = ""
include_dir = []
include_ext = ["go", "tpl", "tmpl", "html"]
kill_delay = "0s"
log = "build-errors.log"
send_interrupt = false
stop_on_error = true

[color]
app = ""
build = "yellow"
main = "magenta"
runner = "green"
watcher = "cyan"

[log]
time = false

[misc]
clean_on_exit = false

[screen]
clear_on_rebuild = false

步骤3:构建Docker镜像

docker build -t airy-app .

步骤4:在Docker容器中运行服务器

docker run -p 8080:8080 -v $PWD:/app airy-app
  • docker run:这是用于运行Docker容器的命令。
  • p 8080:8080:此选项将主机上的端口8080映射到容器中的端口8080。它允许外部系统通过端口8080访问容器内运行的应用程序。
  • v $PWD:/app:此选项将主机上的当前工作目录 () 挂载到容器内的目录。这是一个卷挂载,它允许容器访问主机当前工作目录中的文件和目录。对主机或容器中的文件所做的更改将反映在两者中。$PWD/app
  • airy-app:这是您正在运行的Docker映像的名称。它指定将从中创建容器的映像。

docker run命令从映像创建并运行容器。它将端口8080从主机映射到容器中的端口8080,从而允许对应用程序进行外部访问。它还将主机上的当前工作目录挂载到容器内的目录,从而促进主机和容器之间的数据共享。airy-app/app

在Go中使用Live Reload的利弊

优点

实时重新加载是一种开发工具,可显着提高编码过程的效率。每当对源代码进行更改时,它都可以自动和即时更新应用程序,而无需手动重新启动。这就是为什么它是有利的:

  • 提高开发速度: 传统开发通常涉及停止应用程序并重新启动它以查看代码更改生效。实时重新加载通过在保存代码后立即动态应用更改来消除此延迟,从而加快开发工作流程。
  • 最大限度减少停机时间: 如果没有实时重新加载,开发人员经常会遇到停机,等待应用程序在修改后重新启动。实时重新加载可最大限度地减少停机时间,使开发人员能够专注于编码而不会中断。
  • 便于调试: 实时重新加载是一个非常宝贵的调试工具。它通过在进行更改时自动刷新应用程序来加快问题的识别和解决。这种即时反馈循环加快了调试过程。
  • 高效测试:连续和自动重新加载有助于测试不同的场景,确保在不需要人工干预的情况下对更改进行彻底测试。
  • 无缝容器开发:在Docker等容器化环境中,实时重新加载对于快速适应更改很有价值,可以更轻松地识别和解决容器化应用程序中的问题。
  • 复杂项目的理想选择: 在具有众多依赖项或延长启动时间的复杂项目中,实时重新加载被证明特别有益。它通过提供对代码更改影响的实时可见性来简化开发过程,而无需重复手动干预。

从本质上讲,实时重新加载是一种节省时间的机制,可以简化开发工作流程,减少停机时间,帮助调试,并且被证明对于具有复杂结构或扩展启动过程的项目特别有利。

缺点

  • 资源密集型:实时重新加载工具通常会消耗额外的系统资源来监视和重新加载应用程序。这可能会导致开发过程中的内存和CPU使用率增加。
  • 潜在的意外副作用:自动重新加载可能会引入意外行为,尤其是在复杂的应用程序中,因为它会中断现有状态和正在进行的进程。开发人员需要谨慎对待潜在的副作用。
  • 兼容性挑战:集成实时重新加载功能可能需要调整项目结构或依赖关系。某些项目可能与某些实时重新加载工具不兼容。
  • 构建时间开销:在实时重新加载期间重建和重新启动应用程序的过程会略有延迟。虽然这种延迟通常很小,但随着时间的推移,它可能会累积起来,并影响整体开发体验。
  • 对特定工具的依赖性:实时重新加载通常由特定的工具或库(例如,Air、Fresh)促进。依赖于这些工具会引入可能需要管理和更新的依赖关系。

实时重新加载可以通过提供有关代码更改的快速反馈来显著改善开发体验。但是,开发人员应该意识到潜在的缺点,包括资源消耗、意外的副作用以及在某些项目环境中仔细集成的必要性。使用实时重新加载的决定应基于项目的具体需求和特点。

结论

综上所述,实时重载在开发过程中的重要性怎么强调都不为过。它可以作为更高效工作流程的催化剂,使开发人员能够实时见证其代码更改的影响。

就Go (Golang) 而言,像Air这样的工具通过自动化重建和重启过程,培养持续的开发体验,发挥着关键作用。这不仅加快了迭代速度,还提高了整体生产力,因为开发人员可以专注于编码,而不会因人工干预而造成中断。

从本质上讲,以Air等工具为代表的实时重新加载是现代开发环境中不可或缺的资产,有助于实现更快的反馈循环和更灵敏的编码体验。