一个自用的Go项目目录结构,分为两个部分,第一部分为框架,作为一个单独的项目,其它项目可直接通过import引入该项目,第二部分为不同的项目的目录
抽离框架目录
core {
frame {
api(响应规范)
cache(缓存)
cmd(命令行,可调用代码生成)
config(配置结构体)
constant(常量)
db(数据库链接)
entity(公共实体)
errortool(错误工具)
gen(负责代码生成,如生成错误代码文件,生成的错误代码可鼠标悬浮看到注释)
log(日志)
middleware(中间件)
mq(消息队列)
secure(安全工具类,获取当前登录用户,部门,IP等信息)
validate(字段输入验证)
initializer.go (初始化项目,后续看情况抽离为一个目录)
}
init
lib {
mail(邮件发送)
verify(验证码工具类)
}
util(工具类) {
array.go
collection.go
date.go
file.go
id.go
ip.go
jwt.go
math.go
number.go
slice.go
sql.go
tree.go
}
}实际项目目录
cmd {
migration {
}
server {
wire {
wire.go
wire_gen.go
}
load.go 配置加载,如 redis 连接等
main.go
}
task {
}
}
config {
conf.go
config.yaml(不包含到代码里,部署打包的时候自动添加到目录下)
config.example.yaml(配置样本文件)
}
internal {
controller {
admin
index
}
entity(实体) {
domain(对应数据库字段)
dto(接收请求体)
vo(Api接口返回视图)
}
global(错误代码,全局变量等) {
constant(常量)
enum(枚举)
error(错误代码,通过命令自动生成该文件,实际是拉取数据库配置生成)
exception(抛出异常工具)
}
interceptor(拦截器) {
}
pkg
repo(操作数据库){
}
route {
admin
index
}
service(具体逻辑) {
}
task
util
websocket {
}
}
pkg {
}
website(网站目录) {
icon
static
template
}