Nunu架构详解
Nunu采用了经典的分层架构。同时,为了更好地实现模块化和解耦,采用了依赖注入框架Wire。

目录结构
.
├── api
│ └── v1
├── cmd
│ ├── migration
│ ├── server
│ │ ├── wire
│ │ │ ├── wire.go
│ │ │ └── wire_gen.go
│ │ └── main.go
│ └── task
├── config
├── deploy
├── docs
├── internal
│ ├── handler
│ ├── middleware
│ ├── model
│ ├── repository
│ ├── server
│ └── service
├── pkg
├── scripts
├── test
│ ├── mocks
│ └── server
├── web
├── Makefile
├── go.mod
└── go.sumcmd:应用程序的入口,包含了不同的子命令。config:配置文件。deploy:部署相关的文件,如 Dockerfile 、 docker-compose.yml等。internal:应用程序的主要代码,按照分层架构进行组织。pkg:公共的代码,包括配置、日志、HTTP 等。script:脚本文件,用于部署和其他自动化任务。storage:存储文件,如日志文件。test:测试代码。web:前端代码。
internal
internal/handler( orcontroller):处理 HTTP 请求,调用业务逻辑层的服务,返回 HTTP 响应。internal/server(orrouter):HTTP 服务器,启动 HTTP 服务,监听端口,处理 HTTP 请求。internal/service(orlogic):服务,实现具体的业务逻辑,调用数据访问层repository。internal/model(orentity):数据模型,定义了业务逻辑层需要的数据结构。internal/repository(ordao):数据访问对象,封装了数据库操作,提供了对数据的增删改查。
依赖注入
本项目采用了依赖注入框架Wire,实现了模块化和解耦。Wire通过预编译wire.go,自动生成依赖注入的代码wire_gen.go,简化了依赖注入的过程。
cmd/job/wire.go:Wire配置文件,定义了job子命令需要的依赖关系。cmd/migration/wire.go:Wire配置文件,定义了migration子命令需要的依赖关系。cmd/server/wire.go:Wire配置文件,定义了server子命令需要的依赖关系。
Wire官方文档:https://github.com/google/wire/blob/main/docs/guide.md
注意:wire_gen.go文件为自动编译生成,禁止手动修改
公共代码
为了实现代码的复用和统一管理,本项目采用了公共代码的方式,将一些通用的代码放在了pkg目录下。
pkg/config:配置文件的读取和解析。pkg/helper:一些通用的辅助函数,如 MD5 加密、UUID 生成等。pkg/http:HTTP 相关的代码,如 HTTP 客户端、HTTP 服务器等。pkg/log:日志相关的代码,如日志的初始化、日志的写入等。more...:当然,你可以自由添加扩展更多的pkg。