Files
wk-backend/codestable/refactors/2026-04-25-backend-cleanup/2026-04-25-backend-cleanup-apply-notes.md
zhilv 536aa506f9 refactor: 后端代码优化 11 项(codestable/refactors/2026-04-25-backend-cleanup)
- 提取 getWKFromContext 辅助函数,消除 handler 中 5 处重复代码
- 提取 retryCode 函数,消除 Login/performStudy 中验证码重试重复
- 提取 removeSession 内部方法,消除 Del/ClearAll/ClearExpired 中 3 处重复
- 提取 WK.UserKey() 方法,消除 4 处 userKey 手动拼接
- SessionManager.Get() 改用 RLock 优化读性能
- GetRecords 递归分页改为迭代,避免栈溢出
- prepareRequestClient 添加配置缓存,仅在 debug 设置变化时重建
- 修正 schedule.go 时区为 Asia/Shanghai + cron "0 6 * * *"
- 修正 typo "以达到" → "已达到"
- 删除未使用的 QAList struct
- 修复 bufferHub.append 切片内存泄漏

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-26 13:07:45 +08:00

2.9 KiB
Raw Blame History

doc_type, refactor
doc_type refactor
refactor-apply-notes 2026-04-25-backend-cleanup

backend-cleanup apply notes

步骤 1: 删除未使用的 QAList struct#10

  • 完成时间: 2026-04-26
  • 改动文件: internal/ckwk/types.go
  • 验证结果: go vet 通过go build 通过
  • 偏离: 无

步骤 2: 修正 typo "以达到" → "已达到"#9

  • 完成时间: 2026-04-26
  • 改动文件: internal/ckwk/api.go (2 处)
  • 验证结果: go build 通过
  • 偏离: 无

步骤 3: 修正 schedule.go 时区和 cron 表达式(#8

  • 完成时间: 2026-04-26
  • 改动文件: internal/schedule/schedule.go
  • 验证结果: go build 通过
  • 偏离: 改为 Asia/Shanghai + "0 6 * * *" 对齐注释"每天 6 点执行"

步骤 4: 提取 userKey 构造为 WK.UserKey() 方法(#4

  • 完成时间: 2026-04-26
  • 改动文件: internal/ckwk/api.go, internal/ckwk/session_manager.go
  • 验证结果: go vet 通过grep 确认无残留的 Host+":"+Username 拼接
  • 偏离: 无

步骤 5: 提取 getWKFromContext 辅助函数(#1

  • 完成时间: 2026-04-26
  • 改动文件: internal/handler/ckwk.go
  • 验证结果: go vet 通过grep 确认无残留的 ctx.Get("wk_instance") 模式(除 helper 函数本身外)
  • 偏离: 无

步骤 6: 提取 retryCode 函数(#2

  • 完成时间: 2026-04-26
  • 改动文件: internal/ckwk/api.go
  • 验证结果: go vet 通过
  • 偏离: Login() 中原错误信息包含"登录终止"后缀,提取后统一为"已达到最大重试次数,验证码获取失败"(两个调用点共享同一个错误消息),不再区分"登录终止"和 Study 场景的措辞差异

步骤 7: 提取 removeSession 内部方法(#3

  • 完成时间: 2026-04-26
  • 改动文件: internal/ckwk/session_manager.go
  • 验证结果: go vet 通过
  • 偏离: 无

步骤 8: SessionManager.Get() 优化锁策略(#5

  • 完成时间: 2026-04-26
  • 改动文件: internal/ckwk/session_manager.go
  • 验证结果: go vet 通过
  • 偏离: 采用 RLock→检查存在→RUnlock→Lock→更新→Unlock 两步走方案

步骤 9: GetRecords 递归改迭代(#6

  • 完成时间: 2026-04-26
  • 改动文件: internal/ckwk/types.goGetRecords 从 resp.go 迁移至 types.go此文件原本就包含该函数
  • 验证结果: go vet 通过
  • 偏离: 提取了 fetchRecordPage 辅助函数来封装单页请求逻辑GetRecords 改为 for 循环迭代

步骤 10: prepareRequestClient 缓存配置(#7

  • 完成时间: 2026-04-26
  • 改动文件: internal/ckwk/api.go
  • 验证结果: go vet 通过
  • 偏离: 在 WK struct 上添加了 3 个缓存字段lastDebugEnabled, lastDebugProxy, lastDebugSkipSSLVerifyprepareRequestClient 在配置未变化时直接返回

步骤 11: 修复 bufferHub.append 切片内存泄漏(#12

  • 完成时间: 2026-04-26
  • 改动文件: pkg/log/buffer.go
  • 验证结果: go vet 通过go build 通过
  • 偏离: 无

全量验证

  • go vet ./... 通过
  • go build ./... 通过