Golang如何做Clean Architecture_Golang整洁架构教程【详解】

Go Clean Architecture 的第一道红线是 cmd 必须极简:cmd/api/main.go 仅解析 flag、调用 app.Run()、返回 error;配置加载、DB 初始化、路由注册等全下沉至 internal/app,禁止在 cmd 中 import infrastructure 或 repository。cmd 目录里只放 main.go,别的都算越界Go Clean Architecture 的第一道红线就是:cmd 必须极简------它不是启动脚本集合,更不是配置加载中心。你塞进去的每一行初始化代码,都在给单元测试埋雷。cmd/api/main.go 只做三件事:解析 flag、调用 app.Run()、返回 error;其余全甩给 internal/app禁止在 cmd 里 import internal/infrastructure 或 internal/repository;否则依赖箭头就反了,domain 层反而被 infra 拖着走常见错误现象:go test ./... 报错 "cannot load config: no such file",根源是 main.go 里硬编码了 viper.ReadInConfig(),导致测试时绕不开文件系统正确做法:把配置加载、DB 连接池创建、HTTP 路由注册全部下沉到 app.NewApp(),main.go 仅负责"启动"这个动作domain 层不能出现 sql.NullString 或 time.Time领域模型一旦带上数据库或框架类型,就等于给业务逻辑焊死了持久化方式------这不是设计,是自缚手脚。domain/user.go 中的时间字段必须是 CreatedAt string 或 type CreatedAt time.Time(自定义类型,不直接用标准库 type),转换逻辑交给 internal/adapter空值语义统一用 Go 原生指针:*string、*int64,而不是 sql.NullString;后者绑死了 database/sql 的 Scan/Value 方法,mock 仓库时根本没法构造合法实例ORM tag(如 gorm:"column:name")只能出现在 internal/adapter/repository 的映射结构体里,绝不出现在 domain 层使用场景:写单元测试时,你要用内存仓库模拟用户创建,如果 domain 结构体含 sql.NullString,连 json.Unmarshal 都会失败------因为它的内部字段不可导出go mod tidy 后 go.sum 疯涨?先查是不是误引了重型 SDKgo.sum 膨胀本身不危险,但若里面混进 google.golang.org/grpc/cmd/protoc-gen-go-grpcgolang.org/x/tools,说明 build 流程已把开发期工具打进生产依赖。 Mokker AI AI产品图添加背景

相关推荐
IvorySQL4 分钟前
PG 日报|社区讨论重构 pg_hba 配置文件格式
数据库·人工智能·postgresql·重构·ivorysql
逝水无殇7 分钟前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
白帽小阳1 小时前
2026前端面试题!(附答案及解析)
javascript·网络·python·安全·web安全·网络安全·护网行动
乱写代码1 小时前
Python开发技巧--类型注解Literal
python
卷无止境1 小时前
Python FFI 技术深度解析:ctypes、cffi 与 pybind11 的性能差异与实践挑战
后端·python
罗政2 小时前
PDF 批量合并工具:本地 AI 自动排序、识别正文日期与合同编号
数据库·pdf·php
郝学胜-神的一滴2 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
SelectDB2 小时前
宽表元数据膨胀怎么解?Doris Segment V3 对比 Parquet、Lance
大数据·数据库·数据分析
万笑佛2 小时前
Python 实现Kafka SASL认证生产消费
python