go用gin框架 实现热更新fresh
加入目录结构是/myapp/cmd/server/main.go
那我需要进入到server 执行fresh 但是fresh只能监控到当前执行的目录也就是server和他的子目录
我应该如何才能在myapp下面执行呢 这样能监控所有
测试
go用gin框架 实现热更新fresh
加入目录结构是/myapp/cmd/server/main.go
那我需要进入到server 执行fresh 但是fresh只能监控到当前执行的目录也就是server和他的子目录
我应该如何才能在myapp下面执行呢 这样能监控所有
测试
go没有hot refresh功能哦。
fresh和air都是live reload,就是监控文件改动然后帮你重新编译重新启动而已。
fresh已经很久没有更新了,建议使用air
air的配置文件air_example.toml
4 回答968 阅读
2 回答617 阅读
2 回答493 阅读
使用 Fresh 在 Go 项目中实现热更新
目标
在
/myapp根目录下运行fresh,同时监控整个项目(包括/myapp/cmd/server/main.go及其它子目录)。1. 理解 Fresh 的工作原理
fresh是 Go 的热重载工具,监控.go文件变化后自动重新编译和运行程序。fresh仅监控执行命令时的当前目录及其子目录。/myapp/cmd/server目录下运行fresh时,无法监控/myapp根目录及其它平行目录(如/myapp/pkg或/myapp/internal)。2. 目录结构
假设你的项目结构如下:
3. 解决方案
步骤 1:安装 Fresh
确定已安装
fresh:步骤 2:创建 Fresh 配置文件
在
/myapp目录下创建fresh.conf文件:配置说明:
root: .→ 设定项目根目录为/myapp。build_target: ./cmd/server→ 构建目标为/myapp/cmd/server/main.go。watch: - ./**/*.go→ 监控整个项目的.go文件。步骤 3:运行 Fresh
在
/myapp目录下执行:此时
fresh会:/myapp下所有.go文件(包括cmd,internal,pkg等)。/myapp/cmd/server/main.go并生成可执行文件/myapp/tmp/myapp。4. 替代方法:命令行参数
如果不想使用配置文件,可以直接在
/myapp目录执行:参数解析:
-w .→ 监控/myapp目录及子目录。-b ./cmd/server→ 构建目标为/myapp/cmd/server。5. 运行测试
在
/myapp目录下执行:访问
http://localhost:8080/ping,应该返回:main.go或其它.go文件(例如添加新路由)。fresh发现文件变更后自动重启应用。http://localhost:8080/ping,确认更新生效。6. 常见问题
🔹 Q:fresh 没有监控某些目录?
✅ A:检查
fresh.conf中的watch配置,建议使用:🔹 Q:编译失败?
✅ A:查看
/myapp/tmp/build.log,检查是否有语法错误或依赖问题。🔹 Q:fresh 没有自动重启?
✅ A:保证修改的文件在
watch目录中,且未被exclude排除。使用 Air 实现 Go 项目热更新
✅ 第一步:安装 Air
使用以下命令安装 Air:
确保
$GOPATH/bin已加入你的环境变量,这样你就可以直接使用air命令。✅ 第二步:创建配置文件
.air.toml(可选但推荐)在你的项目根目录下创建
.air.toml文件,示例如下:✅ 第三步:运行 Air
在项目根目录下运行:
Air 会自动监听
.go文件的变更,重新编译并运行程序。📁 示例项目结构
🚀 示例
main.go🧠 小贴士
main.go后保存,Air 会自动重启程序.air.toml可根据项目结构灵活配置Go 原生不支持,但后来提到的工具(如 Fresh、Air)是 社区开发的辅助工具,它们通过监听文件变更并自动重启程序,模拟出类似 Hot Reload 的开发体验
以下是 Fresh 和 Air 的对比表格:
go installgo install.go,.html,.tpl等runner.confair.toml(更强大)✅ 推荐建议