Go不主动连接前端,而是通过HTTP协议响应前端请求;关键在于路径一致、格式统一(如固定Resp结构)、开发用Vite代理避免跨域,生产按需配CORS,路由推荐gorilla/mux或Gin以支持路径参数。Go 本身不“连”前端,而是通过 HTTP 协议与前端通信。前端发请求,Go 写 handler 响应;不是双向绑定,也不是自动同步。关键在协议对齐、路径一致、格式可控。
开发时用 Vite 代理 API,别在 Go 里配 CORS
前端跑 http://localhost:5173,go 后端跑 :8080,直接 fetch /api/user 会跨域失败——这不是 go 的问题,是浏览器策略。
- Vite 开发服务器自带 proxy:在
vite.config.ts里加server.proxy,把/api前缀转发到http://localhost:8080 - Go 后端此时完全不用写
Access-Control-Allow-Origin头,也不用引入cors中间件 - 只有当你绕过代理(比如直接访问 Go 端口)、或部署后前端域名和后端域名不同时,才需要后端配 CORS
- 生产环境若需 CORS,用
github.com/rs/cors,传cors.AllowedOrigins([]string{"https://myapp.com"}),别用cors.AllowAll()
Go 后端必须统一响应结构,不能裸 return map
前端靠固定字段解析数据,{code: 0, msg: "ok", data: {...}} 是底线。返回 map[string]interface{} 或直接 json.NewEncoder(w).Encode(v) 容易漏字段、类型错乱、无法加 code 错误码。
- 定义结构体:
type Resp struct { Code int `json:"code"`; Msg string `json:"msg"`; Data interface{} `json:"data"` } - 所有 handler 最终都走
json.NewEncoder(w).Encode(Resp{...}),包括错误路径 -
code != 0时,HTTP 状态码仍建议用200(避免触发前端全局 error 拦截器),仅靠code字段区分业务错误 - 401/403 这类认证态错误除外:HTTP 状态码设为
401或403,同时code字段也填对应值,前后端双保险
前端带路径参数(如 /user/123),Go 标准库不支持 :id 语法
net/http.ServeMux 只做前缀匹配,注册 /user/ 不会命中 /user/123。硬切 strings.Split(r.URL.Path, "/") 易出错,尤其嵌套路径或可选参数。
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
- 用轻量路由库,比如
gorilla/mux:r.HandleFunc("/user/{id}", handler).Methods("GET") - 或直接换
gin:router.GET("/user/:id", handler),c.Param("id")直接取值 - 如果坚持用标准库,至少用
http.StripPrefix+ 正则匹配路径,别依赖URL.Path手动拆分 - 注意:路径参数值默认未解码,
%20还是%20,要用url.PathUnescape手动处理
Mock Server 要能被前端“无感切换”,别改前端代码
联调时前端不该改 URL 地址,否则上线容易漏切回真实后端。Mock 的价值是路径、方法、响应格式完全对齐真实接口,仅内容可变。
- 用
net/http起服务,监听:8080,注册/api/user、/api/login等真实路径 - 响应头必须设
Content-Type: application/json; charset=utf-8,否则前端fetch().json()会失败 - 加
w.Header().Set("Access-Control-Allow-Origin", "*"),开发阶段够用 - 前端通过代理切换:Vite 的
proxy指向 Mock 地址;或改/etc/hosts把api.example.com指向127.0.0.1,Mock 监听:80 - 千万别在前端代码里写
if (env === 'mock') api = 'http://localhost:8080'—— 这种逻辑上线前极易遗漏
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










