GoFrame 是一款模块化、高性能、企业级的 Go 基础开发框架。
它实现了比较完善的基础设施建设以及开发工具链,提供了众多常用的基础开发模块,例如缓存、日志、队列、数组、集合、容器、定时器、命令行、内存锁、对象池、配置管理、资源管理、数据校验、数据编码、定时任务、数据库 ORM、TCP/UDP 组件、进程管理/通信等。同时,GoFrame 也提供了 web 服务开发的系列核心组件,如 router、cookie、session、middleware、服务注册、模板引擎等,支持热重启、热更新、域名绑定、TLS/HTTPS、rewrite 等特性。
GoFrame 的主要特点包括:
- 模块化、松耦合设计;
- 模块丰富、开箱即用;
- 简便易用、易于维护;
- 高代码质量、高单元测试覆盖率;
- 社区活跃;
- 拥有详尽的开发文档及示例;
- 具备完善的本地中文化支持;
- 设计为团队及企业使用。
安装 GoFrame 推荐使用go.mod
方式,在go.mod
文件中添加以下命令:require github.com/gogf/gf latest
。
其项目地址如下:
- 主库:https://github.com/gogf/gf
- 码云:gf: GoFrame是一款模块化、高性能、企业级的Go基础开发框架。如果您想使用Golang开发一个业务型项目,无论是小型还是中大型项目,GoFrame是您的不二之选。如果您想开发一个Golang组件库,GoFrame提供开箱即用、丰富强大的基础组件库也能助您的工作事半功倍。
文档方面,中文官方网站为:https://goframe.org ,中文镜像文档可参考:https://pages.goframe.org ,中文离线文档见:https://github.com/gogf/goframe.org-pdf ,Godoc API 地址为:gf package - github.com/gogf/gf/v2 - Go Packages 。
GoFrame 推荐使用三层架构设计模式来进行代码分层,其基本目录结构如下:
/
├── app
│ ├── api
│ ├── dao
│ ├── model
│ └── service
├── boot
├── config
├── docker
├── document
├── i18n
├── library
├── packed
├── public
├── router
├── template
├── dockerfile
├── go.mod
└── main.go
各目录和文件的具体作用如下:
app:业务逻辑层,存放所有业务逻辑相关的代码。其中的 api、dao、model、service 是业务开发的主要部分。
- api:业务接口,类似于三层架构设计中的表示层(UI),负责接收并响应客户端的输入与输出,包括对输入参数的过滤、转换、校验,对输出数据结构的维护,并调用 service 实现业务逻辑处理。
- dao:数据访问层,负责所有的数据访问收口,通过 ORM 组件等实现数据的增删改查等操作,并将操作结果反馈到业务逻辑层。
- model:模型定义层,主要用于数据库表的映射对象,包含数据结构定义,不包含任何方法定义。它服务于表示层、业务逻辑层以及数据访问层,在三层之间进行数据参数传输,强化数据表示的简约性。
- service:业务逻辑封装层,类似于三层架构设计中的业务逻辑层(BLL),负责具体业务逻辑的实现以及封装,可被不同的包调用。
- boot:初始化包,用于项目初始化参数设置,通常是 main.go 中第一个被导入的包。config:配置管理,存放所有的配置文件
- docker:镜像文件,包含 docker 镜像相关的依赖文件、脚本文件等。
- document:项目文档,如设计文档、帮助文档等。
- i18n:国际化配置文件目录。
- library:公共库包,用于封装公共的功能,往往不涉及具体的业务需求实现
- packed:打包目录,将资源文件打包的 go 文件存放在此处,boot 包初始化时会自动调用。
- public:静态目录,只有该目录下的文件才能对外提供静态服务访问,不建议将程序当前运行目录加入到静态服务中。
- router:路由注册,用于统一管理路由。
- template:模板文件,存放 MVC 模板文件的目录,在实践中也可采用 MVVM 模式,使用如 Vue/React 等框架实现模板解析。
- dockerfile:镜像描述,云原生时代用于编译生成 docker 镜像的描述文件。
- go.mod:依赖管理,使用 Go module 包管理的依赖描述文件。
- main.go:入口文件,程序的入口。
- 在实践中,可根据项目的实际情况对目录进行增删。这种分层设计能够体现出“高内聚、低耦合”的软件设计思想,有利于业务开发和代码维护。