# diploma-project **Repository Path**: garychou/diploma-project ## Basic Information - **Project Name**: diploma-project - **Description**: 极客时间Go进阶训练营第3期毕业项目 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-10-24 - **Last Updated**: 2026-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # diploma-project #### 介绍 极客时间Go进阶训练营第3期毕业项目 #### 需求说明 对当下自己项目中的业务,进行一个微服务改造,需要考虑如下技术点: 1. 微服务架构(BFF、Service、Admin、Job、Task 分模块) 2. API 设计(包括 API 定义、错误码规范、Error 的使用) 3. gRPC 的使用 4. Go 项目工程化(项目结构、DI、代码分层、ORM 框架) 5. 并发的使用(errgroup 的并行链路请求 6. 微服务中间件的使用(ELK、Opentracing、Prometheus、Kafka) 7. 缓存的使用优化(一致性处理、Pipeline 优化) #### 架构说明 1. /cmd: 本项目的主干,负责程序的: 启动、关闭、配置初始化 1. interface: 对外的 BFF 服务,接受来自用户的请求,比如暴露了 HTTP/gRPC 接口。 2. service: 对内的微服务,仅接受来自内部其他服务或者网关的请求,比如暴露了gRPC 接口只对内服务。 3. admin:区别于 service,更多是面向运营测的服务,通常数据权限更高,隔离带来更好的代码级别安全。 4. job: 流式任务处理的服务,上游一般依赖 message broker。 5. task: 定时任务,类似 cronjob,部署到 task 托管平台中。 3. /configs: 放服务所需要的配置文件,比如database.yaml、redis.yaml、application.yaml。 4. /internal: 私有应用程序和库代码,为了避免有同业务下有人跨目录引用了内部的 biz、data、service 等内部 struct 1. biz: 业务逻辑的组装层,类似 DDD 的 domain 层,data 类似 DDD 的 repo,repo 接口在这里定义,使用依赖倒置的原则。 2. data: 业务数据访问,包含 cache、db 等封装,实现了 biz 的 repo 接口。我们可能会把 data 与 dao 混淆在一起,data 偏重业务的含义,它所要做的是将领域对象重新拿出来,我们去掉了 DDD 的 infra 层。 3. service: 实现了 api 定义的服务层,类似 DDD 的 application 层,处理 DTO 到 biz 领域实体的转换(DTO -> DO),同时协同各类 biz 交互,但是不应处理复杂逻辑。