From af31b688cf4b43964bf42302fb3b689facf6a650 Mon Sep 17 00:00:00 2001 From: maguodong Date: Sat, 28 Mar 2026 09:56:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(server):=20=E8=A7=A3=E5=86=B3=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=99=A8=E5=90=AF=E5=8A=A8=E6=97=B6=E7=AB=AF=E5=8F=A3?= =?UTF-8?q?=E5=8D=A0=E7=94=A8=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 提取配置地址到变量以避免重复调用 - 添加端口被占用的具体错误提示 - 区分不同类型的启动错误并提供相应信息 - 在启动失败时添加程序退出机制确保服务正常终止 --- server/server.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/server/server.go b/server/server.go index 24a256a..f36a97c 100644 --- a/server/server.go +++ b/server/server.go @@ -33,8 +33,9 @@ func New() *gin.Engine { // @Param *gin.Engine 路由实例 // 设置监听挂壁 func Run(g *gin.Engine) { + addr := config.GetConfigValue("server.addr", ":8080").String() s := &http.Server{ - Addr: config.GetConfigValue("server.addr", ":8080").String(), + Addr: addr, Handler: g, ReadTimeout: 60 * time.Second, ReadHeaderTimeout: 60 * time.Second, @@ -44,7 +45,14 @@ func Run(g *gin.Engine) { } go func() { if err := s.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { - log.Error("服务器启动失败:", err) + // 检查是否是端口被占用的错误 + if strings.Contains(err.Error(), "address already in use") || + strings.Contains(err.Error(), "Only one usage of each socket address") { + log.Error(fmt.Sprintf("服务器启动失败:%s 端口已被占用,请检查是否有其他程序正在使用该端口", addr)) + } else { + log.Error("服务器启动失败:", err) + } + os.Exit(1) // 启动失败则退出程序 } }() log.Info("服务器启动成功....")