5.5 KiB
5.5 KiB
name, overview, todos
| name | overview | todos | |||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| service-span-naming-dedupe | 将 service 层 span 名从 svc.<方法名> 统一改为 svc.<领域><方法名>,消除跨 service 的同名 span,使 span 名全局唯一、可按名过滤,并与 DAO 层 dao.<领域><动作> 命名风格对齐。 |
|
用户需求
将 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。