From a4f5af3338936df1104b43dc0556c13a0e6435de Mon Sep 17 00:00:00 2001 From: AI Engineer Date: Thu, 4 Jun 2026 21:33:14 +0800 Subject: [PATCH] publish v1.5.3 --- CHANGELOG.md | 16 ++++++++++------ go.mod | 4 ++-- go.sum | 8 ++++---- server.go | 11 ++++------- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 244eb39..84880e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,17 @@ # CHANGELOG - go/service +## v1.5.3 (2026-06-04) +- **新特性**: + - `Static` 静态文件服务增加默认索引文件识别:当请求目录时,若未配置 `IndexFiles`,会自动尝试匹配 `index.html` 或 `index.htm`。 +- **优化**: + - 依赖升级至 `apigo.cc/go/log v1.5.3`,实现对第三方库原始日志的自动劫持与 `serverId` 注入。 + - 清理了启动阶段多余的诊断日志,确保“零配置”启动时的控制台纯净度。 +- **稳定性**: + - 修复了 `Start()` 函数的幂等性问题,防止在手动调用与 `starter` 框架调度冲突时产生重复绑定端口的错误。 + ## v1.5.2 (2026-06-04) - **架构重构**: 彻底移除全局状态泄露,重构为严格的单例模式。 - - 将所有路由 (`webServices`)、代理配置 (`hostProxies`)、静态资源 (`statics`) 及鉴权器等 30 多个包级全局变量移入私有的 `webServer` 结构体中。 - - `NewWebServer()` 改为直接返回全局安全的 `DefaultServer` 单例。 - - 所有的包级公开方法(如 `Register`, `Proxy`, `Static` 等)现作为 `DefaultServer` 实例方法的安全代理。 -- **依赖更新**: 升级 `apigo.cc/go/log` 至 `v1.5.1`,修复了在使用 `starter` 时异步控制台日志被静默丢弃的关键 Bug。 - -## v1.5.1 (2026-06-04) +... - **修复**: 在 `WebServer.Start` 中显式调用 `config.Load(&Config, "service")`,确保启动时自动从 `env.yaml` 加载 `service:` 块。 - **修复**: 优化 `WebServer.Reload` 的配置加载逻辑,确保与启动加载逻辑保持一致。 diff --git a/go.mod b/go.mod index e2f603a..b7fab50 100644 --- a/go.mod +++ b/go.mod @@ -10,10 +10,10 @@ require ( apigo.cc/go/http v1.5.0 apigo.cc/go/id v1.5.0 apigo.cc/go/jsmod v1.5.0 - apigo.cc/go/log v1.5.2 + apigo.cc/go/log v1.5.3 apigo.cc/go/redis v1.5.0 apigo.cc/go/safe v1.5.0 - apigo.cc/go/starter v1.5.0 + apigo.cc/go/starter v1.5.1 apigo.cc/go/timer v1.5.0 github.com/gorilla/websocket v1.5.3 golang.org/x/net v0.54.0 diff --git a/go.sum b/go.sum index 15a76a4..b052621 100644 --- a/go.sum +++ b/go.sum @@ -16,8 +16,8 @@ apigo.cc/go/id v1.5.0 h1:MjNWPhBhDsoXaLeJDv/0wfJmVMU9EvOs8pWYfsTQ6e8= apigo.cc/go/id v1.5.0/go.mod h1:qhu4a1/KLc/XcBpcsRu+mXZt7U7Wvd9zMcPs4VspuPA= apigo.cc/go/jsmod v1.5.0 h1:JgQtJNiJWy1NOP9AzE8NX5VXJkpO/x3GqLsCCSny5Ec= apigo.cc/go/jsmod v1.5.0/go.mod h1:bmyeZtOAP/j5am+YRnaiM89smysK24K7ebk0koFtsSw= -apigo.cc/go/log v1.5.2 h1:ORcrDh6a4ghxIrm+TNLtm8HxjctwndGL2jCLctEIags= -apigo.cc/go/log v1.5.2/go.mod h1:Djy+I5aLhGB/EjwRz4KHqkVEz584IAD55FAFiIfInuo= +apigo.cc/go/log v1.5.3 h1:rEF0w6OpiPc/bBNA1NdGadtN+vUw645lL9tM27yZ1U8= +apigo.cc/go/log v1.5.3/go.mod h1:Djy+I5aLhGB/EjwRz4KHqkVEz584IAD55FAFiIfInuo= apigo.cc/go/rand v1.5.0 h1:1o8hh8fhdBuk1/h02IvugvamuT3dkWbVJrqEJVQKB2E= apigo.cc/go/rand v1.5.0/go.mod h1:Lh98S2dm9UY0X+M+kNQQEKyXHG5pcCKSFPyXN0QCGdk= apigo.cc/go/redis v1.5.0 h1:VXNDqzKj87BchF7ubDEH+T6lp8NrjeK0izU4ooo7u1A= @@ -26,8 +26,8 @@ apigo.cc/go/safe v1.5.0 h1:W1NblmcU8cex1f9Y5z8mNLUJOzZTE1s6fszb3FbhGnk= apigo.cc/go/safe v1.5.0/go.mod h1:OfQ5d6COePSGEuPvMeOk6KagX2sezw7nvKh7exj9SeM= apigo.cc/go/shell v1.5.0 h1:WLDMMqUU0INeaBDmQsTPr0h/NfB2RknAtiJ5NL467+Q= apigo.cc/go/shell v1.5.0/go.mod h1:rYHA77d5hEsQHcJrbAWf1pHy0sxayeJ0gU55LA/JWQk= -apigo.cc/go/starter v1.5.0 h1:z6wnDrGx/iM6Z+A86FbIW4Y1rNywGzPNY+y2vYQJeMw= -apigo.cc/go/starter v1.5.0/go.mod h1:ru2vVCIvBYDWZ9SmPP4JLyEueUh71Y24ww/wDvCT+Vs= +apigo.cc/go/starter v1.5.1 h1:vW/dYZYWkGGPZGXdQyGqS3UeSdrTlSI9Yg1rpN+qHt4= +apigo.cc/go/starter v1.5.1/go.mod h1:ru2vVCIvBYDWZ9SmPP4JLyEueUh71Y24ww/wDvCT+Vs= apigo.cc/go/timer v1.5.0 h1:iPo/IQn+iuhBRI1/MR1txwZnamef/RBBfOiIlBiqkgk= apigo.cc/go/timer v1.5.0/go.mod h1:kOnqTTX+zA4AH7SfC+LpUm4ZvS+DVyWWMqul/V5QWJs= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= diff --git a/server.go b/server.go index ec9c370..cde88ec 100644 --- a/server.go +++ b/server.go @@ -389,7 +389,7 @@ func (ws *webServer) Start(ctx context.Context, logger *log.Logger) error { errChan := make(chan error, 1) go func() { - logger.Info("service starting", "addr", ws.Addr, "proto", protocol) + logger.Info("starting listener", "addr", ws.Addr, "proto", protocol) ws.running = true if err := ws.server.Serve(ws.listener); err != nil && err != http.ErrServerClosed { errChan <- err @@ -410,11 +410,6 @@ func (ws *webServer) Start(ctx context.Context, logger *log.Logger) error { // Stop 停止服务,实现 starter.Service 接口 func (ws *webServer) Stop(ctx context.Context) error { - logger := ws.logger - if logger == nil { - logger = log.DefaultLogger - } - logger.Info("service stopping") ws.running = false if ws.discoverer != nil { ws.discoverer.Stop() @@ -424,7 +419,6 @@ func (ws *webServer) Stop(ctx context.Context) error { return err } } - logger.Info("service stopped") return nil } @@ -483,6 +477,9 @@ var startOnce sync.Once // Start 兼容旧版的同步启动方法 (通过内部注册 starter 实现) func Start() { + if DefaultServer.running { + return + } startOnce.Do(func() { stopTimeout := time.Duration(Config.StopTimeout) * time.Millisecond if stopTimeout <= 0 {