publish v1.5.3
This commit is contained in:
parent
c88139e202
commit
a4f5af3338
16
CHANGELOG.md
16
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` 的配置加载逻辑,确保与启动加载逻辑保持一致。
|
||||
|
||||
|
||||
4
go.mod
4
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
|
||||
|
||||
8
go.sum
8
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=
|
||||
|
||||
11
server.go
11
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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user