Go不直接参与前端开发,而是通过Vite等工具链实现前后端分离:开发时用Vite代理API请求至Go后端,生产时用http.FileServer托管构建产物并处理SPA路由fallback。
Go 本身不直接参与前端开发,所谓“Golang 前端与后端开发环境”实际是指:用 Go 写后端服务(如 API、静态文件服务器),同时配合主流前端工具链(如 Vite、Webpack)进行本地开发。关键不是让 Go “支持前端”,而是解决前后端分离下的跨域、代理、热更新和构建产物对接问题。
如何用 http.Server 启动静态文件服务并代理 API 请求
开发时前端通常跑在 http://localhost:5173(Vite 默认),后端 Go 服务跑在 :8080。若前端直接调用 /api/users,浏览器会因同源策略拒绝请求——除非后端明确允许跨域,或前端工具反向代理到 Go 服务。
更稳妥的做法是:让前端开发服务器(如 Vite)把 API 请求代理给 Go 后端,而 Go 只专注提供接口和静态资源服务(用于生产构建后部署)。开发阶段不需要在 Go 中写 CORS 中间件来“适配前端”。
- 在 Vite 项目中配置
vite.config.ts的server.proxy:
export default defineConfig({
server: {
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
}
}
}
})
- Go 后端保持简洁,无需处理 Origin 头或预检请求(
OPTIONS); - 确保 Go 路由以
/api开头(如r.HandleFunc("/api/users", handler)),与代理前缀一致; - 代理只在开发生效,构建后的
dist目录交给 Nginx 或 Go 自带的http.FileServer托管。
为什么不要在 Go 中用 net/http 直接 serve 前端开发服务器的热更新资源
Vite/React/Vue 的 dev server 依赖 WebSocket 和内存中的模块图实现 HMR(热更新),它们不生成真实磁盘文件。如果用 Go 的 http.FileServer 指向 src/ 或 dist/(此时为空),页面会 404 或加载旧资源。