--- name: service-span-naming-dedupe overview: 将 service 层 span 名从 svc.<方法名> 统一改为 svc.<领域><方法名>,消除跨 service 的同名 span,使 span 名全局唯一、可按名过滤,并与 DAO 层 dao.<领域><动作> 命名风格对齐。 todos: - id: rename-clothes-outfit content: 替换 clothes.go、outfit.go 共 13 处 span 命名(Clothes/Outfit 领域前缀) status: completed - id: rename-closet-collect-like content: 替换 closet.go、collect.go、like.go 共 8 处 span 命名(ClosetShare/Collect/Like 领域前缀) status: completed - id: rename-notification-quota-user content: 替换 notification.go、quota.go、user.go 共 10 处 span 命名(Notification/Quota/User 领域前缀) status: completed - id: rename-goods-horoscope-order-airecommend content: 替换 goods.go、horoscope.go、order.go、airecommend.go 共 11 处 span 命名(Goods/Horoscope/Order/AIRecommend 领域前缀) status: completed - id: verify-build-vet content: 运行 go build ./... 与 go vet ./...,并搜索确认无裸 svc 方法名 span status: completed dependencies: - rename-clothes-outfit - rename-closet-collect-like - rename-notification-quota-user - rename-goods-horoscope-order-airecommend --- ## 用户需求 将 service 层已埋设的 span 命名从 `svc.<方法名>` 调整为 `svc.<领域名><方法名>`,解决因多个 service 存在同名方法而导致的 span 名重复问题(如 `svc.Create`、`svc.List`、`svc.GetByUUID`),使每个 span 名全局唯一、可精确过滤与区分业务归属。 ## 功能内容 - 仅修改 `global.Tracer.Start(ctx, "svc.Xxx")` 中的 span 名字符串,不改变业务逻辑、方法签名、import 或返回类型。 - 领域名取 Service 结构体名去掉 `Service` 后缀,与 DAO 层 `dao.ClothesCreate`、`dao.OutfitCreate` 的「领域名 + 动作」驼峰命名风格保持一致。 - 覆盖 12 个 service 文件、共 42 处 span。 ## 技术栈 - 语言:Go - 可观测:OpenTelemetry Trace(`global.Tracer.Start`) - 改动性质:纯字符串替换,无新增依赖、无结构变更 ## 实现方案 ### 命名规则 - 领域名 = Service 结构体名去掉 `Service` 后缀: - ClothesService → Clothes - OutfitService → Outfit - ClosetShareService → ClosetShare - CollectService → Collect - LikeService → Like - NotificationService → Notification - QuotaService → Quota - UserService → User - GoodsService → Goods - HoroscopeService → Horoscope - OrderService → Order - AIRecommendService → AIRecommend - span 名 = `svc.` + 领域名 + 方法名,驼峰无分隔,与方法名大小写一致。 ### 特殊处理 - `CollectService.Collect` → `svc.CollectCollect`、`LikeService.LikeCreate` → `svc.LikeLikeCreate`,为「领域名 + 方法名」严格拼接导致的字面重复,但规则统一、机械可推导;本次不重命名方法本身。 ## 实现细节 - 仅替换 `global.Tracer.Start(ctx, "svc.Xxx")` 的第二个字符串参数。 - 不改 import、不新增/删除 span、不调整方法体其他内容。 - 每个文件内按方法逐一替换,保证 42 处全部覆盖。 ## 目录结构 ``` internal/service/ ├── clothes.go # [MODIFY] svc.Upload→svc.ClothesUpload、svc.ProcessImageAsync→svc.ClothesProcessImageAsync、svc.ProcessStatusGetByUUID→svc.ClothesProcessStatusGetByUUID、svc.GetByUUID→svc.ClothesGetByUUID、svc.UpdateByUUID→svc.ClothesUpdateByUUID、svc.DeleteByUUID→svc.ClothesDeleteByUUID、svc.List→svc.ClothesList(7 处) ├── outfit.go # [MODIFY] svc.Create→svc.OutfitCreate、svc.GetByUUID→svc.OutfitGetByUUID、svc.UpdateByUUID→svc.OutfitUpdateByUUID、svc.List→svc.OutfitList、svc.Delete→svc.OutfitDelete、svc.Public→svc.OutfitPublic(6 处) ├── closet.go # [MODIFY] svc.Create→svc.ClosetShareCreate、svc.Detail→svc.ClosetShareDetail、svc.List→svc.ClosetShareList、svc.Cancel→svc.ClosetShareCancel(4 处) ├── collect.go # [MODIFY] svc.Collect→svc.CollectCollect、svc.List→svc.CollectList(2 处) ├── like.go # [MODIFY] svc.LikeCreate→svc.LikeLikeCreate、svc.GetByTargetID→svc.LikeGetByTargetID(2 处) ├── notification.go # [MODIFY] svc.List→svc.NotificationList、svc.GetByUUID→svc.NotificationGetByUUID、svc.Read→svc.NotificationRead、svc.Unread→svc.NotificationUnread(4 处) ├── quota.go # [MODIFY] svc.InfoGetBySelf→svc.QuotaInfoGetBySelf、svc.FlowList→svc.QuotaFlowList(2 处) ├── user.go # [MODIFY] svc.WxLogin→svc.UserWxLogin、svc.InfoGetBySelf→svc.UserInfoGetBySelf、svc.ProfileUpdate→svc.UserProfileUpdate、svc.RefreshToken→svc.UserRefreshToken(4 处) ├── goods.go # [MODIFY] svc.GetByCode→svc.GoodsGetByCode、svc.List→svc.GoodsList(2 处) ├── horoscope.go # [MODIFY] svc.GetToday→svc.HoroscopeGetToday(1 处) ├── order.go # [MODIFY] svc.Create→svc.OrderCreate、svc.PayNotify→svc.OrderPayNotify、svc.Cancel→svc.OrderCancel、svc.List→svc.OrderList、svc.RefundApply→svc.OrderRefundApply、svc.RefundNotify→svc.OrderRefundNotify(6 处) └── airecommend.go # [MODIFY] svc.Create→svc.AIRecommendCreate、svc.Save→svc.AIRecommendSave(2 处) ``` ## 验证方式 - `go build ./...` 与 `go vet ./...` 通过。 - 全项目搜索确认不再存在 `"svc.Create"`、`"svc.List"`、`"svc.GetByUUID"` 等裸方法名 span。