后端与接口
Go 微服务后端需要生产级工程化时:用整洁架构、可观测性…
适用于用 Go 构建微服务后端并希望按生产级标准组织代码、错误处理、上下文、可观测性、安全、测试和交付流程的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
Go 微服务后端需要生产级工程化时:用整特定
解决思路
- 使用 Clean Architecture,将代码清晰分离为 handlers、services、repositories 和 domain models。
- 优先采用接口驱动开发,并显式进行依赖注入。
- 编写短小、专注且职责单一的函数。
- 确保安全使用 goroutines,用 channels 或 sync primitives 保护共享状态。
- 维护模块化项目结构,使用清晰目录:project/、cmd/、internal/、pkg/、api/、configs/、test/。
- 始终显式检查和处理错误。
- 使用包装错误以便追踪:fmt.Errorf("context: %w", err)。
- 为领域特定错误创建自定义错误类型。
- 沿调用栈向上返回错误时附加上下文。
- 以适当级别记录错误,并提供足够上下文。
- 使用 context 传播请求作用域值、截止时间和取消信号。
- 将 context 作为函数的第一个参数传递。
- 在长时间运行操作中尊重 context 取消。
- 为外部调用设置合适的超时。
- 使用 OpenTelemetry 实现全面可观测性。
- 为重要操作添加 spans。
- 跨服务边界传播 trace context。
- 在 spans 中包含相关属性。
- 为业务操作实现自定义 metrics。
- 使用标准 metric 类型(counters、gauges、histograms)。
- 以 Prometheus 格式导出 metrics。
- 使用结构化日志,并保持字段名一致。
- 在日志条目中包含 trace IDs。
- 以适当级别记录日志(debug、info、warn、error)。
- 对所有外部输入严格应用输入验证。
- 为 JWT tokens 和 cookies 使用安全默认值。
- 实现正确的认证和授权。
- 记录日志前对数据脱敏,避免泄露敏感信息。
- 数据库查询使用 prepared statements。
- 编写表驱动单元测试,并保持足够覆盖率。
- 在安全的情况下使用并行测试执行。
- 使用接口 mock 外部依赖。
- 重点测试业务逻辑。
- 将集成测试与单元测试分开。
- 使用 test containers 处理数据库和服务依赖。
- 测试实际 API endpoints 和响应。
- 适当使用 goroutines 处理并发操作。
- 用 channels 或 sync primitives 保护共享状态。
- 实现正确的优雅关闭。
- 使用 worker pools 实现有界并发。
- 使用 GoDoc 风格注释编写文档。
- 保持注释与代码变更同步。
- 彻底记录公共 API。
- 在文档中包含有用的示例。
- 维护 CI 集成以进行 linting 和测试。
- 使用 golangci-lint 进行全面 linting。
- 在每个 pull request 上运行测试。
- 包含代码覆盖率报告。
适用边界 · 注意事项
- 不适用于非 Go 项目或与 Go 微服务后端无关的简单脚本、CLI 工具。
- 不适用于只需要快速原型验证、暂不关注生产可观测性、安全与 CI/CD 的场景。
- 若团队尚未引入 OpenTelemetry、Prometheus、golangci-lint、test containers 等工具,需要先评估引入成本,不宜直接全套照搬。