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产品图添加背景

相关推荐
J_bean5 分钟前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交
J_bean9 分钟前
MySQL InnoDB 如何检测死锁、判定死锁、处理死锁
数据库·mysql·死锁·死锁检测·处理死锁·死锁判定
2601_9563198824 分钟前
2026年零基础学量化:从看懂示例到写清条件和动作
人工智能·python
浪子明X43 分钟前
从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
数据库·mongodb·oracle
杜子不疼.1 小时前
国产数据库撑起固井软件自主化:金仓 × 中海油服「海恒 Cemsol」落地解析
数据库
过期的秋刀鱼!1 小时前
LangChain-D1-模型的工作流程
人工智能·python·langchain
隔窗听雨眠1 小时前
GBase 8s并发控制深度解析:封锁机制、隔离级别与死锁处理全攻略
服务器·数据库·oracle
萤火工厂目视化设计1 小时前
智能制造与企业文化目视化浪潮下:中小工厂的机遇与挑战
python·制造
刀客Doc1 小时前
即时零售不只是多一个渠道,品牌开始重做终端生意
大数据·数据库
就叫飞六吧2 小时前
防抖、幂等、唯一约束三件套 ;
数据库