前端资源改了不刷新,因vite/react/vue的hmr依赖内存模块图和websocket,不生成磁盘文件;go的http.fileserver无法服务src/或空dist/,必须用npx vite单独启动前端,air运行后端,通过proxy代理api请求。

GoLand 里前端资源改了不刷新?别用 http.FileServer 直接 serve src/
Vite/React/Vue 的热更新(HMR)依赖内存模块图和 WebSocket,根本不会把编译结果写到磁盘。如果你在 Go 后端用 http.FileServer(http.Dir("src/")) 或 http.FileServer(http.Dir("dist/")) 去 serve 前端资源,浏览器只会看到 404 或旧文件——因为 dist/ 在开发时是空的,src/ 又不是可执行的 HTML 资源树。
正确做法是:前端必须独立启动自己的 dev server(如 npx vite),后端只做 API 代理或数据服务。GoLand 内置终端里开两个标签页,一个跑 npx vite,另一个跑 air,两者完全解耦。
- 确保
vite.config.ts中配置了server.proxy把/api转发到http://localhost:8080(你的 Go 后端地址) - GoLand 的 Terminal 标签页默认共享工作目录,进项目根目录后分别执行:
npx vite和air - 浏览器访问
http://localhost:5173(Vite 默认端口),所有静态资源由 Vite 提供,HMR 正常;API 请求经 proxy 到 Go 后端,air负责后端代码变更重启
air 不重载你改的 .go 文件?检查它“看得到”哪些路径
air 默认只监听当前命令执行目录下的 .go 文件,且不递归进入 internal/、pkg/、cmd/ 等子目录——哪怕你改的是 internal/handler/user.go,只要没在 go.mod 所在根目录运行 air,它就完全无感。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 必须在
go.mod所在的项目根目录下执行air,不是在cmd/myapp/或internal/里 - 运行
air init生成.air.toml,确认root = "."(别写死成C:xxxmyproj) - 在
.air.toml中显式添加业务目录到include_dir,例如:include_dir = ["internal", "pkg", "cmd"] - 如果用了
.yaml配置或模板文件,补上:include_ext = ["go", "yaml", "tmpl"] - Windows 下路径分隔符统一用
/或./开头,避免导致匹配失败
配置文件热更新失效?viper.WatchConfig() 不是自动重载
viper.WatchConfig() 只注册监听器并触发回调,不读文件、不解析、不更新任何变量。常见现象是日志打印“配置已更新”,但 viper.GetInt("port") 还是启动时的值——因为你没在回调里手动重读和反序列化。
- 回调函数第一行必须是:
if err := viper.ReadInConfig(); err != nil { return } - 紧接着必须调:
if err := viper.Unmarshal(&newCfg); err != nil { return },漏掉这步结构体字段永远不变 - 配置结构体指针必须用
atomic.Value存储,例如:var globalConf atomic.Value,初始化时globalConf.Store(&defaultCfg) - 每次成功解析后才执行:
globalConf.Store(&newCfg)(注意取地址) - 业务代码统一通过
conf := globalConf.Load().(*Config)获取,禁止缓存该指针或直接赋值字段
GoLand 终端里 air 启动失败:PATH 和进程继承问题
在 GoLand 终端中执行 air 报 “not recognized as an internal or external command”,本质是环境变量没生效,不是安装失败。更隐蔽的问题是:GoLand 启动时读取的是旧的 PATH 缓存,即使你刚在 PowerShell 里加了 goin,也不代表 GoLand 知道。
- 修改完 PATH 后,必须彻底关闭 GoLand(不只是关 Terminal 标签页),再重新打开
- 验证方式:在 GoLand Terminal 里执行
echo $PATH(Linux/macOS)或echo %PATH%(Windows),确认输出含goin - 如果仍不行,临时用绝对路径启动:
C:Users\goinir.exe - GoLand 的 Run Configuration 里若用 External Tool 调
air,需勾选 “Include system environment variables”,否则 PATH 不继承










