根本原因是go默认代理proxy.golang.org在国内无法直连,必须执行go env -w goproxy=https://goproxy.cn,direct并确保go111module=on,否则安装gin会connection refused或timeout。

go get 安装 gin 失败:connection refused 或 timeout
根本原因是 Go 默认代理 proxy.golang.org 在国内无法直连,不是网络问题,而是策略性屏蔽。不配代理就卡死,配错格式也会静默失败。
- 必须执行
go env -w GOPROXY=https://goproxy.cn,direct(注意逗号后带direct,否则私有模块会失败) - 同时确认
GO111MODULE=on,用go env -w GO111MODULE=on强制开启 - 不要在
$GOPATH/src下直接建项目——go mod项目必须独立于GOPATH,否则go get会报no required module provides package - 安装前先
go mod init your-module-name,再go get -u github.com/gin-gonic/gin
gin.Run() 启动后访问 404 或连接被拒绝
常见于端口冲突、防火墙拦截或监听地址绑定错误。Windows 下尤其容易忽略默认绑定的是 0.0.0.0:8080,而某些杀毒软件/防火墙会拦截该地址的入站连接。
- 启动时显式指定地址:
r.Run("127.0.0.1:8080"),避免暴露到局域网且绕过部分防火墙策略 - 检查端口占用:
netstat -ano | findstr :8080,杀掉 PID 对应进程(或换端口如:8888) - 若需外网访问(如 IIS 反向代理场景),改用
r.Run(":8080"),但务必确认 Windows 防火墙已放行该端口 -
gin.Default()自带Logger和Recovery中间件,出错时控制台会打印堆栈;若完全无日志输出,大概率是进程未真正启动成功
IIS 反向代理 Gin 后端时请求 502 或超时
Gin 是纯 HTTP 服务,不支持 CGI/FastCGI,必须走反向代理。IIS 默认不启用 URL Rewrite 模块,且代理配置稍有偏差就会返回 502 Bad Gateway。
- 先安装 IIS 的 URL Rewrite 和 Application Request Routing (ARR) 模块(缺一不可)
- 在站点根目录的
web.config中配置代理规则,关键点:<rule name="Proxy to Gin"><match url="^api/(.*)"></match><action type="Rewrite" url="http://127.0.0.1:8888/{R:1}"></action></rule> - ARR 必须启用 Server Proxy(在 ARR 缓存设置里勾选 “Enable proxy”)
- Gin 后端响应头中若含
Content-Length: 0或空 body,IIS 可能提前关闭连接——确保所有 handler 至少写入一个字节(比如c.String(200, "")要改成c.String(200, "ok"))
生产环境静态资源 404 或跨域失败
开发时用 gin.Default() + r.StaticFS 很方便,但上线后路径、权限、CORS 策略全要重审。
-
r.StaticFS("/static", http.Dir("D:\app\static"))中的路径必须是绝对路径,相对路径在 service 模式下会解析失败 - Windows 服务账户(如
LocalSystem)默认无权读取用户目录,把静态文件放到C:inetpubwwwrootyour-appstatic这类 IIS 默认可读路径更稳妥 - CORS 不是 Gin 内置功能,必须手动加中间件:
r.Use(Cors()),其中Cors()要明确设置Access-Control-Allow-Origin,不能只写*(带凭证时无效) - 前端构建后的
index.html若通过 Gin serve,需配合r.NoRoute()fallback,否则刷新子路由(如/user/list)会 404
applicationHost.config 中调大 arrResponseBufferLimit,否则现象是响应体不完整、前端解析失败但后端日志显示“已写入”。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











