fix(server): 解决服务器启动时端口占用错误处理问题

- 提取配置地址到变量以避免重复调用
- 添加端口被占用的具体错误提示
- 区分不同类型的启动错误并提供相应信息
- 在启动失败时添加程序退出机制确保服务正常终止
main v1.0.1019
maguodong 2026-03-28 09:56:08 +08:00
parent abf5529019
commit af31b688cf
1 changed files with 10 additions and 2 deletions

View File

@ -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("服务器启动成功....")