From 9d95aecd6f77e556ece83188770106a3669c2b81 Mon Sep 17 00:00:00 2001 From: xfy Date: Thu, 16 Apr 2026 18:24:05 +0800 Subject: [PATCH] =?UTF-8?q?refactor(lua):=20=E6=8F=90=E5=8F=96=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E5=B9=B6=E4=BC=98=E5=8C=96=E7=BB=93=E6=9E=84=E4=BD=93?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - api_var.go: 提取 argPrefix 常量,消除魔法字符串 - coroutine.go: 按逻辑分组重排 LuaCoroutine 字段,改善可读性 Co-Authored-By: Claude Opus 4.6 --- internal/lua/api_var.go | 11 +++++++---- internal/lua/coroutine.go | 16 +++++++--------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/internal/lua/api_var.go b/internal/lua/api_var.go index 49b33db..ad5ad1d 100644 --- a/internal/lua/api_var.go +++ b/internal/lua/api_var.go @@ -8,6 +8,9 @@ import ( glua "github.com/yuin/gopher-lua" ) +// argPrefix 是 arg_ 变量的前缀,用于获取查询参数 +const argPrefix = "arg_" + // ngxVarAPI ngx.var API 实现 type ngxVarAPI struct { // 请求上下文 @@ -166,12 +169,12 @@ func (api *ngxVarAPI) getVariableLua(name string) glua.LValue { return glua.LString(string(api.ctx.Host())) // URI 参数 - case "arg_": + case argPrefix: // 获取所有参数 return glua.LString(string(api.ctx.URI().QueryString())) default: // 检查是否是 arg_ 开头的参数 - if len(name) > 4 && name[:4] == "arg_" { + if len(name) > len(argPrefix) && name[:len(argPrefix)] == argPrefix { paramName := name[4:] return glua.LString(string(api.ctx.QueryArgs().Peek(paramName))) } @@ -244,10 +247,10 @@ func (api *ngxVarAPI) getVariable(name string) string { return "" case "server_name": return string(api.ctx.Host()) - case "arg_": + case argPrefix: return string(api.ctx.URI().QueryString()) default: - if len(name) > 4 && name[:4] == "arg_" { + if len(name) > len(argPrefix) && name[:len(argPrefix)] == argPrefix { paramName := name[4:] return string(api.ctx.QueryArgs().Peek(paramName)) } diff --git a/internal/lua/coroutine.go b/internal/lua/coroutine.go index 60b03c1..2b7e5ac 100644 --- a/internal/lua/coroutine.go +++ b/internal/lua/coroutine.go @@ -63,19 +63,17 @@ func (p Phase) String() string { type LuaCoroutine struct { CreatedAt time.Time ExecutionContext context.Context - Engine *LuaEngine - Co *glua.LState - Cancel context.CancelFunc + ngxReqAPI *ngxReqAPI RequestCtx *fasthttp.RequestCtx + Co *glua.LState + ngxVarAPI *ngxVarAPI + ngxRespAPI *ngxRespAPI + ngxLogAPI *ngxLogAPI + Cancel context.CancelFunc executionCancel context.CancelFunc + Engine *LuaEngine OutputBuffer []byte Exited bool - - // ngx API 实例(用于测试和 Go 层访问) - ngxVarAPI *ngxVarAPI - ngxReqAPI *ngxReqAPI - ngxRespAPI *ngxRespAPI - ngxLogAPI *ngxLogAPI } // SetupSandbox 创建 per-request _ENV 沙箱