将近一个月没有更新博客了,主要还是因为道心破了,实在是没有什么动力学习了。二十多天里,试着考了几天研,也试着工作考研两手抓。考虑了很久,还是觉得要提升代码能力,找了一个新的开源项目,不像之前一样每天跟着教程写了,试着能不能自己把别人的代码看懂吃透。

这里插一句,道心破了主要是因为在后面的几场面试里总是达不到想要的效果,说话磕磕巴巴,问项目就回答的含糊不清,也不怪面试官给我秒挂,太不自信了,再沉淀一段时间吧,只能寄希望于秋招了。

项目结构

1
2
3
4
├── deploy: 部署相关的文件
├── docs: 项目文档
├── server: 后端代码
└── web: 前端代码

项目分为两个部分,使用 vue 框架的前端部分和使用 gin 框架的后端部分,前端部分在web 目录下,后端部分在server目录下。由于我对前端的内容不是很了解,所以主要关注 server 后端部分。了解一下目前 github 排名第一的 golang admin 项目是怎么设计的。

后端结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
├── api
│   └── v1: v1 版本的 api,相当于java中的 controller
├── config: 配置类,包括数据库配置,jwt 配置,redis 配置等
├── core
│   └── internal: 服务启动方法
├── docs: swagger 文档
├── global: 全局对象
├── initialize
│   └── internal: 初始化方法,日志,数据库,redis,jwt,定时任务等
├── middleware: 中间件,包括跨域,jwt,casbin,日志,全局异常处理等,使用了 gin.handleFunc 的特性
├── model: 数据库模型,请求参数,响应参数
│   ├── common
│   └── system
├── packfile
├── plugin:
│   ├── email: email 插件,是个完整的小项目,里面结构和外部类似
│   ├── plugin-tool:
│   └── ws
├── resource: 资源文件,包括自动生成代码的模板,页面模板,插件模板等
│   ├── autocode_template: 代码模板,从结构体生成代码
│   ├── page: 前端静态资源
│   └── plug_template: 插件代码模板
├── router:路由代码
│   └── system:
├── service: 业务代码,相当于 java 中的 service
│   └── system
├── source: 数据库的初始数据
│   └── system
└── utils: 公共的工具类
├── captcha
├── plugin
├── timer
└── upload

本文是总结篇,提前写是想要有条理一点。下面是代码的主函数,我计划从主函数开始,一行一行地写一遍完整的项目,实在找不到相关的教程,所以学习的过程应该会比较艰辛,希望自己能够坚持下来吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func main() {
global.GVA_VP = core.Viper() // 初始化Viper
initialize.OtherInit()
global.GVA_LOG = core.Zap() // 初始化zap日志库
zap.ReplaceGlobals(global.GVA_LOG)
global.GVA_DB = initialize.Gorm() // gorm连接数据库
initialize.Timer()
initialize.DBList()
if global.GVA_DB != nil {
initialize.RegisterTables() // 初始化表
// 程序结束前关闭数据库链接
db, _ := global.GVA_DB.DB()
defer db.Close()
}
core.RunWindowsServer()
}

学习收获

Go语言库: