Skip to content

D. 公共函数速查 ​

概述

后端共享能力速查:logic/base.go 15 个导出函数 + module_spec/data_scope 包级函数 + utility 九包。纪律:base.go 只依赖 dao/utility/consts,导出上限 15。

logic/base.go(共享能力层) ​

函数职责
SaveFileFields(ctx, data, fields, saveDir)单文件字段批量转正(原地更新 map)
SaveMultiFileFields(ctx, data, fields, saveDir)逗号多文件字段批量转正
SaveFileField(ctx, fileUrl, saveDir)单值便捷版
SaveMultiFileField(ctx, fileUrls, saveDir)逗号串便捷版
LocalizeContentFields(ctx, content, saveDir)富文本存库本地化([IMG_URL] 占位符化)
ExpandContentFields(ctx, content)富文本读取还原(唯一还原出口)
DictGetText(ctx, code, value)字典值 → 显示名(进程内 300s)
SerializeMapOnRead(ctx, data, fieldDict)map 行补 {field}Text
LogTypeText(v int)操作日志类型 → 中文(静态表)
CheckUnique(ctx, m, column, value, excludeId, label)唯一性快速校验(TOCTOU,真值靠 uk_*)
WithTrans(ctx, fn)事务包裹(错误自动回滚)
ChunkQuery(ctx, build, size, fn)分块遍历(导出防 OOM,默认 500/页)
BuildTree[T](rows, idOf, pidOf, childrenOf, less)泛型平铺转树
CleanTemp(ctx, expireDays)清理上传临时日期目录
fillUserCount(column, list)按外键统计引用数(内部,level/position 复用)

logic 包级共享函数 ​

函数位置职责
ResolveCityNames(ctx, codes, sep)city.go区划编码 → 名称串
ResolveCityCodes(ctx, cityInfo)city.go名称串 → 四级编码
LoadIdentity / LoadTenantauth.go身份/租户加载(中间件接线)
ApplyDataScope(deptColumn)data_scope.go行级数据权限工厂
RegisterJobHandler(name, h)job_handler.go本地任务处理器注册(重名 panic)
FillTextFields(ctx, target, maps)module_spec.go{field}Text 结构体填充

utility 基础能力包 ​

包主要 API职责
utility/cacheInit/Set/Get/Del/Exists/SetNX/UsingMemory统一缓存门面(Redis 优先、内存降级)
utility/captchaGenerate/Verify验证码(一次性、bypassCode)
utility/cryptoGenerateSalt/HashPassword/VerifyPassword/IsBcryptbcrypt 双重加盐
utility/excelReadSheet/WriteSheetexcelize 封装(FileOpener 兼容两种)
utility/ip2regionCity/Locationxdb 归属地(懒加载+读锁)
utility/jwtSign/Parse/ExpireDurationHS256 双令牌
utility/responseOk/Fail/Write统一信封写出
utility/uaParseOS/ParseBrowserUA 解析
utility/uploadSaveTemp/SaveFromTemp/SaveFromTempMulti/GetFileUrl/BaseDir两段式上传

consts 常量包 ​

文件内容
biz_err.go17 个业务错误码(1/400/401/403/429/500 + 1001-1015)
cache_key.goRedis 键前缀 easygoadmin:
context_key.go上下文读写(consts.GetXxx(ctx))
log_type.go41 个日志类型常量 + LogTypeMap/LogTypeNames

使用优先级建议 ​

text
1. spec 声明能表达 → 用声明(FileFields/SerializeMaps/UniqueFields/DataScope)
2. spec 钩子能表达 → 用钩子(Before/After)
3. 需要底层能力 → base.go / utility(组合调用)
4. 跨模块业务复用 → logic 包级函数(放具体模块文件顶部)
5. 新横切能力 → 评估进 base.go(≤15 导出)或拆 base/ 子包

小蚂蚁云团队 · 提供技术支持