本篇文章介绍的是自己在实际go项目开发中使用的目录结构说明,如有更好的组织形式可以入群950828714或者关注微信公众号 ”行者说“ 交流
目录结构说明
Gin Web项目开发都是按照如下所示目录组织
goproj_org
├── todo.go # main 入口
├── go.mod
├── go.sum
├── config # 配置文件存放
│ └── config.yaml
├── controller # api 接口逻辑,http handler
│ ├── DemoController.go
│ └── TodoController.go
├── model # model定义
│ └── Todo.go
├── router # 路由入口
│ ├── middleware # gin框架 自定义中间件,中间件一般用于路由中,故放到这里
│ │ └── jwt.go
│ └── router.go
├── service
│ ├── ConfigService.go
│ ├── DBService.go
│ └── TodoService.go
└── util # 公共函数部分,比如加密,时间处理等
└── encrypt.go</pre>
1、config 目录
是存放配置文件,一般是程序主配置文件和,日志配置文件
2、model 目录
是实体模型定义,一般是一个实体一个文件,比如 Todo.go
3、service 目录
是实体和数据库处理逻辑存放,比如新增一个实体;
另外也把数据库链接和配置文件处理等放到了service下;在有些情况下可以:
独立`database目录` 存放数据库连接的逻辑
独立`system 目录`存放配置文件加载和读取逻辑
4、controller目录
,有时候也叫 handler目录,是实际HTTP请求的api接口处理,对应到Gin框架中就是handler函数
5、router 目录
是定义路由的地方
6、middleware 目录
存在router下,实现自定义的中间件逻辑,Gin框架中间件一般用于路由中
7、util 目录
是定义公共函数、工具的地方
8、这里的第一层级的todo.go 有时候也会命名成main.go
就是整个程序的入口
Golang的 可见性规则
上一篇文章 基于Gin的golang web开发增删改查实战(TodoList) 中所有的逻辑都在单个文件中实现,因为Todo项目本身就很简单,所有单个文件存放还不至于太混乱。但是一旦把不同的逻辑拆分到不同的目录之后,需要注意Golang的 可见性规则
。
什么是Golang的 可见性规则?
Go语言中没有像其它语言一样有public、protected、private等访问控制修饰符。如果想要实现这样的访问控制是怎么做的呢,golang通过字母大小写
来控制可见性的。
在定义常量、变量、类型、接口、结构、函数等的名称是大写字母开头表示能被其它包访问或调用(相当于public),非大写开头就只能在包内使用(相当于private,变量或常量也可以下划线开头)
附加:
本次demo实战详细代码请参考 https://gitee.com/colin5063/go-learn/tree/master/20201225-projorg
有疑问加站长微信联系(非本文作者)