用 net/http 起最简 Mock Server 只需 5 行代码:注册路径、设 JSON 响应头、开 CORS、选常用端口、返回动态数据;关键在于不改前端代码,通过代理或 hosts 切换,避免环境变量硬编码。

用 net/http 起一个最简 Mock Server,5 行代码够用
不需要框架,net/http 自带的 http.ServeMux 和 http.ListenAndServe 就能跑起来。关键不是“怎么搭”,而是“怎么让前端不改代码就能切过去”——路径、方法、响应格式必须对齐真实接口。
- 用
http.HandleFunc注册路径,别写死/api/user,留好占位符(比如用/{id}配合http.StripPrefix或直接解析r.URL.Path) - 响应头一定要设
Content-Type: application/json; charset=utf-8,否则前端fetch可能解析失败 - 别忘了加
Access-Control-Allow-Origin: *,不然浏览器直接跨域拦截,连 404 都看不到 - 端口选
8080或3001这类前端开发常用端口,避免和后端服务冲突
返回不同状态码和动态数据,靠 http.ResponseWriter 控制
Mock 的价值不在“返回固定 JSON”,而在模拟真实交互逻辑:超时、报错、分页、登录态校验。这些全靠手动读请求、写响应头和 body 实现。
- 用
r.Method区分GET/POST,r.Header.Get("Authorization")模拟鉴权 - 状态码用
w.WriteHeader(http.StatusUnauthorized),别只写fmt.Fprint(w, "...") - POST 数据用
r.ParseForm()或io.ReadAll(r.Body)读取,注意r.Body只能读一次 - 动态返回(比如按 query 参数返回不同用户):解析
r.URL.Query().Get("id"),再查 map 或 switch
本地联调时,前端怎么无缝切换到 Mock?
不是改前端代码里的 URL,而是用代理或 Hosts 绑定。改代码等于埋雷,下次上线容易漏切回真实地址。
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
- Webpack/Vite 开发服务器配
proxy:把/api前缀转发到http://localhost:8080 - 用
hosts文件把api.example.com指向127.0.0.1,Mock Server 监听:80(需 root 权限)或用nginx反代 - 千万别在前端代码里写
if (process.env.NODE_ENV === 'development') {...}切地址——环境变量可能误发布 - Mock Server 启动后,用
curl -v http://localhost:8080/api/user先验证响应结构和 header
为什么不用 httptest.Server?它不适合联调
httptest.Server 是为单元测试设计的,生命周期绑定在 test 函数内,无法被外部进程(比如浏览器、Postman)访问。它监听的是随机端口,且没提供 HTTP/HTTPS 外部可连通能力。
-
httptest.NewServer返回的 URL 形如http://127.0.0.1:56789,每次运行端口都变,前端没法配置 - 它默认不处理 CORS,也不支持长连接、流式响应等真实场景特性
- 真要写测试,用
httptest.NewRequest+httptest.NewRecorder更轻量;联调必须用真实http.ListenAndServe - 如果想自动 reload,加个
air或fresh就行,不用上完整 Web 框架
真正难的不是启动一个服务,而是让每个接口的行为边界清晰:哪些字段必填、哪些字段会空、错误码对应哪类业务异常。这些细节得和前端对齐,光返回 JSON 格式正确没用。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










