网站首页 > 技术文章 正文
在你的项目中只是“空气”
如果你从 Node.js 进入 Go 世界,你可能会错过 JavaScript、Angular、React、Vue 等中的一项重要功能。
它们都可以快速开发,因为它们会在您保存正在处理的文件时进行更改,当您使用诸如 express 之类的东西时也会发生同样的事情,有诸如 nodemon 之类的工具可以使这项工作变得容易。
在 Go 中,有多种方法可以实现这一点。在我看来,我将展示其中一个,最好的一个。我还将向您描述仅使用 Go 应用程序或 docker-compose 文件中的其他依赖项来执行此操作。
此方法适用于 go 模块。此外,如果您使用 go get 添加新的依赖项,该应用程序也将重新加载。
目录
本教程分为以下主题:
- 示例 go 应用程序(带有 go 模块)
- Live-Reload 单个应用程序
- 具有多个依赖项的实时重新加载(docker-compose)
示例应用程序
这个简单的应用程序包含 2 个文件,main.go 和 go.mod,它只是在您每次按 enter 时打印一个随机数 uuid。
module github.com/luisegr/go-live-reload-tutorial
go 1.17
require github.com/google/uuid v1.3.0 // indirect
package main
import (
"fmt"
"time"
"github.com/google/uuid"
)
func main() {
for {
id := uuid.New()
fmt.Println("This is the new id: ", id.String())
time.Sleep(4 * time.Second)
}
}
这个简单的程序每 4 秒生成一个新的 UUID 并将其显示在控制台中,很容易不会分散我们的主要目标:实时重载。
Live Reload - 单个应用程序
为了使用实时重载(重新构建并在保存时重新运行)获取此应用程序,我们需要安装 Air:
go install github.com/cosmtrek/air@latest
这将直接从 Air 存储库安装它。 之后,我们可以通过运行 air -v 来测试安装。
然后我们可以进入我们的应用目录并初始化它:
air init
这将创建一个具有默认值的文件 .air.toml。 您可以查看并修改应用程序所需的内容(构建命令、排除文件夹等)。
它看起来像这样:
root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"
[build]
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
初始化完成后,我们可以开始使用刚刚运行的 live-reload:
air
现在,如果我们对应用程序进行任何更改,它将检测、编译并运行它。 在这个例子中,我只是测试了改变它等待每个 UUID 生成的秒数:
我们也可以在不安装 air 的情况下通过 docker 容器将其归档,只需使用 air docker 映像运行它:
docker run -it — rm \
-w "/go/src/github.com/luisegr/go-live-reload-tutorial" \
-v $(pwd):/go/src/github.com/luisegr/go-live-reload-tutorial \
cosmtrek/air
这将导致相同的输出并在更改时重新加载:
Live-Reload - 多个依赖项
如果您正在使用 docker-compose 运行您的开发环境,并且您正在使用其他东西,如 postgres、mongo、Redis 等。与您的应用程序一起,您还可以使用 Air 进行实时重新加载。
你只需要像这样设置你的 docker-compose.yml :
version: "3.3"
services:
mongodb:
image : mongo
container_name: mongo-my-app
ports:
- 27018:27017
restart: always
volumes:
- mongo-vol:/data/db
environment:
- MONGO_INITDB_ROOT_USERNAME=user
- MONGO_INITDB_ROOT_PASSWORD=pass
## Postgres, redis, minio, etc ...
my-app:
image: cosmtrek/air
# working_dir value has to be the same of mapped volume
working_dir: /project
ports:
- 8000:8000
volumes:
- ./:/project/
links:
- mongodb
container_name: my-app
environment:
- PORT=8000
- MONGO_HOST=mongodb
- MONGO_USER=user
- MONGO_PASSWORD=pass
- MONGO_PORT=27018
- MONGO_DATABASE=test
volumes:
mongo-vol:
然后你可以像往常一样运行你的应用程序:
docker-compose up
您将看到输出,如果您仍然具有实时重新加载功能:
希望这个对你有帮助
猜你喜欢
- 2025-05-02 Node.js+Puppeteer:新一代动态爬虫利器,高效抓取不再难!
- 2025-05-02 现在可以部署到Web Assembly的6种语言
- 2025-05-02 哪种编程语言又快又省电?有人对比了27种语言
- 2025-05-02 阿里云迎来史上最特殊的员工:工号AI001,精通200 多种编程语言!
- 2025-05-02 使用 WebAssembly 和 Go 编写前端 Web 框架
- 2025-05-02 完全用 Go 编写的 JS 引擎(常用的编写javascript的工具有哪些)
- 2025-05-02 使用Docker和Codeship来装运Node.js应用
- 2025-05-02 英特尔 Evo 认证 PC 对决 M1 Macbook:x86 生态加持,Evo 更省心
- 2025-05-02 Playwright 全面教程从入门到精通-Playwright 高级特性与技巧
- 2025-05-02 腾讯首次披露员工构成:研发人员超4万人,占比达66%
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)