创作人 Leo
编辑时间 Mon Aug 15,2022 at 15:47
go语言严格来说不属于面向对象语言,但是它也有面向对象的一些特性
go语言不需要使用什么程序框架,在项目中各个功能模块都是按照包区分,一般来说我们需要哪些功能,可以直接引入对应的包
比如以下为一个go语言程序目录
build/
commands/
conf/
controllers/
core/
crond/
docs/
go.mod
go.sum
main.go
Makefile
middlewares/
models/
README.md
resource/
router/
sdk/
storage/
taskpool/
templates/
test/
tools/
推荐使用 go mod 来管理包,目录中 go.mod 为包管理文件,里面记载了该项目使用的第三方包以及版本号
main.go 为主程序文件 main 函数所在文件,main 函数一般会在里面做初始化操作,比如配置文件,数据库连接等
Makefile 是工程的编译文件,将编译命令写入到该文件,可以方便通过 make 工具执行
conf 目录是配置目录,一般我们会将配置初始化,配置数据句柄,工程全局常量保存在这个目录
commands 是命令目录,我一般会使用 cli 包对工程命令进行管理,这里会将命令划分多个文件,每个文件为一个子命令集合,通过commands.go 对所有命令集再进行配置,最后再main函数中引入并进行初始化
crond 是一些轮询任务,建议通过统一的接口进行管理,并做成可配置的
docs 是项目的文档,sql 和 api 尽量都在这里做一个备份
middlewares 项目使用了 gin 包开发 http 服务,middlewares 是web程序用到的中间件,比如登录验证
models 是项目的数据模型,里面包含了全部数据表映射的结构体,以及各种增删改查,事务处理;子目录 data 为其他数据模型,比如请求第三方接口的 request response 数据映射
resource 是项目的资源数据,比如图片,json 数据等
router 里面写的是 http 的路由
sdk 中有许多子目录,每个子目录都是一个单独的外接功能,比如云储存接入
storage 是项目的临时存储目录,日志可以放在这里,但是生产环境一般不建议放在这里
taskpool 提供了一个 channel 池,用来对异步任务进行统一的管理
templates 是项目的 html 模板目录
test 是单元测试目录
tools 里面也是划分子目录,里面是独立的功能,比如加密,curl
大纲
该框架是一个精简版的对于上述程序结构的实现
主要使用 gorm 作为数据库操作,gin 作为web程序管理
接口程序在 controllers 包中实现,不同的业务逻辑通过不同 controller 进行管理,每个 controller 需要组合 base controller 从而复用 base 逻辑
数据模型在 models 中编写,每个 model 对应一个数据表
配置文件使用简单的 json 格式,通过参数传给主程序
任务