一、项目结构示例

注:该项目是我个人项目示例,各位可以自行命令或设计目录结构。

root@ubuntu:/SuperxonWebSite# tree
.
├── Apps
│   ├── commonConfigurationItem
│   │   └── PersonInChargeWarningInfo
│   │       └── ...
│   └── humanResources
│       └── ...
├── Assets
│   ├── ini
│   │   └── common.ini
│   └── mp4
│       └──...
├── Databases
│   └── ...
├── go.mod
├── go.sum
├── Middlewares
│   └── ...
├── Models
│   └── ProductionMaterialRelation
│       └── ...
├── Pb
│   └── user
│       └── ...
├── Router
│   └── routers.go
├── Services
│   └── kafka.go
├── main.go
└── Utils└── ...

二、文件逐个分析

1.Apps 主体业务层,放入除数据库操作的所有的逻辑处理业务,提供给路由配置连接的函数,示例:

func GetVideoInfoListHandler(c *gin.Context) {videoInfoList, err := FileManager.GetVideoInfoList() //这段代码就是在调取封装好的数据库操作if err != nil {c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})} else {c.JSON(http.StatusOK, videoInfoList)}
}

2.Assets 资源层,放入的是配置文件、外部文件和保存上传的文件,当然也可以把这三部分拆分出来。

3.Databases 数据库的初始化连接层,放入的是各类数据库连接文件,例如:

mysql.go

package Databases
import ("fmt"_ "github.com/go-sql-driver/mysql"_ "github.com/jinzhu/gorm/dialects/mysql""github.com/jmoiron/sqlx"
)
var SuperxonUserDb *sqlx.DBfunc InitMysql() error {var err errorSuperxonUserDb, err = sqlx.Open("mysql", "username:password@(172.20.3.12:3306)/superxon-user?charset=utf8mb4&parseTime=true&loc=Local")if err != nil {fmt.Println("open superxon-user failed,", err)return err}SuperxonUserDb.SetMaxIdleConns(5)SuperxonUserDb.SetMaxOpenConns(15)return nil
}func CloseMysql() {_ = SuperxonUserDb.Close()
}

4.Middlewares 中间件层,放入的就是自定义的中间件,例如:

package Middlewaresimport ("context""github.com/gin-gonic/gin""net/http""time"
)func TimeoutMiddleware(timeout time.Duration) func(c *gin.Context) {return func(c *gin.Context) {// wrap the request context with a timeoutctx, cancel := context.WithTimeout(c.Request.Context(), timeout)defer func() {// check if context timeout was reachedif ctx.Err() == context.DeadlineExceeded {// write response and abort the requestc.Writer.WriteHeader(http.StatusGatewayTimeout)c.Abort()}//cancel to clear resources after finishedcancel()}()// replace request with context wrapped requestc.Request = c.Request.WithContext(ctx)c.Next()}
}

5.Models 数据库模型操作层,对数据库CRUD的处理都在这里,示例:

package UserRelationimport ("SuperxonWebSite/Databases""errors"
)type RightManager struct {Id        int64  `db:"id"`Username  string `db:"username"`Nickname  string `db:"nickname"`RightItem string `db:"right_item"`
}func FindAllRightManager() ([]RightManager, error) {var res = make([]RightManager, 0)sqlStr := "SELECT * FROM right_manager"err := Databases.SuperxonUserDb.Select(&res, sqlStr)if err != nil {return nil, err}return res, nil
}

6.Pb grpc微服务 *.pb.go文件的存放点。

7.Router 放入路由配置文件 routers.go

8.Services 放入的是其它服务组件的初始化等等,例如kafka.go

package Servicesimport ("encoding/json""errors""github.com/tal-tech/go-queue/kq""time"
)var EmailOfWaringInfoKqPusher *kq.Pusher
var EmailOfWaringInfoWithStationKqPusher *kq.Pusher
var EmailOfPtrChangeInfoKqPusher *kq.Pusherfunc KafkaInit() {EmailOfWaringInfoKqPusher = kq.NewPusher([]string{"172.20.3.19:9092", "172.20.3.19:9093", "172.20.3.19:9094"}, "EmailOfWarningInfo")EmailOfWaringInfoWithStationKqPusher = kq.NewPusher([]string{"172.20.3.19:9092", "172.20.3.19:9093", "172.20.3.19:9094"}, "EmailOfWarningInfoWithStation")EmailOfPtrChangeInfoKqPusher = kq.NewPusher([]string{"172.20.3.19:9092", "172.20.3.19:9093", "172.20.3.19:9094"}, "EmailOfPtrChangedInfo")
}

9.Utils 通用工具目录,比如字符处理啊,时间处理等等。

Gin工程项目目录结构相关推荐

  1. Android Studio目录结构和Gradle构建Android项目

    一,Android Studio的目录结构和工程项目介绍 二,Eclipse工程与Android Studio工程的区别 1,Eclipse工程能导入AS运行,但AS建立的工程不能再Eclipse中运 ...

  2. 【Android】Android Studio中新创建的app目录结构

    安装Android Studio后,然后创建一个app项目.对于初学者来说,我们希望了解app目录结构,然后更好的进行开发工作. 但是要想了解一个app的目录结构,首先需要明确两个概念 Project ...

  3. Android 项目的主要目录结构介绍

    Android 项目的主要目录文件: app :通常 Android 的各个组成部分放在此目录中,其中 res 主要存放一些资源文件,如图片.layout.values 等资源.build: 构建目录 ...

  4. Go 学习笔记(84)— Go 项目目录结构

    1. 目录规范 一个好的目录结构至少要满足以下几个要求. 命名清晰:目录命名要清晰.简洁,不要太长,也不要太短,目录名要能清晰地表达出该目录实现的功能,并且目录名最好用单数.一方面是因为单数足以说明这 ...

  5. Udacity机器人软件工程师课程笔记(九)-ROS-Catkin包、工作空间和目录结构

    Catkin包和工作空间 1.Carkin包简介 Catkin是ROS的官方构建系统,也是原始ROS构建系统rosbuild的继承者.catkin结合了CMake宏和Python脚本,在CMake的正 ...

  6. Platform Builder 5下WinCE 5.0目录结构

    Platform Builder 5下WinCE 5.0目录结构 Platform Builder 5已经自带WinCE 5.0,安装过程会指定WinCE 5.0的安装路径,默认为X:\WINCE50 ...

  7. Tomcat软件的目录结构、作用

    要了解Tomcat的目录结构,首先要知道什么是Tomcat? Tomcat是一个Apache软件基金会Jakarta项目中的核心项目:是一个免费的开放源代码的轻量级Web应用服务器:运行时占用资源小, ...

  8. CentOS目录结构超详细版

    最近初学Linux 对linux的目录产生了很多疑问,看到这篇文章,让我顿时对目录有了一个清晰的认识!推荐给大家! ------------------------------------------ ...

  9. caffe这个c++工程的目录结构

    目录结构 caffe文件夹下主要文件: data 用于存放下载的训练数据 docs 帮助文档 example 一些代码样例 matlab MATLAB接口文件 python Python接口文件 mo ...

最新文章

  1. 完全用Linux工作,抛弃windows
  2. How Many Replication Method In SAP HANA
  3. 专注jQurey的博客【2012年度IT博客大赛分类推荐】
  4. 系统通知并发问题_玩转Java高并发?请先说明下并发下的惊群效应
  5. Python实现简单的记账本功能
  6. PHP session的工作原理
  7. Spring自学日志07(整合Mybatis)
  8. ack过来服务器未响应,DHCP服务器问题:抓不到ACK包
  9. Swift 5用Template自动创建VIPER架构代码
  10. ubuntu下qt+科大讯飞语音库的导入方法
  11. 模式识别与机器学习 第一章 绪论
  12. 动态修改Log4J和Logback的日志级别
  13. 基于java可视化的会议室管理系统
  14. mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
  15. day16 Java 集合
  16. 麦吉尔大学计算机工程的世界排名,不只是知名大学:麦吉尔大学你需要知道这些!...
  17. 意外收获:如何将中文转成拼音
  18. 模电练习题-多路信号发生器(仿真解答)
  19. To B 业务 vs To C 业务
  20. 【程序源代码】表白墙源码

热门文章

  1. 时间序列数据的截尾和拖尾分析(Python实现)
  2. 2022年33个最佳WordPress健康与医疗主题
  3. 小米智能家居技术分析
  4. 佳能C3025打印机扫描方法
  5. cut out数据增强_常见的数据增强项目和论文介绍
  6. 论文笔记--Fine-Grained Service-Level Passenger Flow Prediction for Bus Transit Systems
  7. Mongrel无法启动解决方案
  8. window -Ubuntu 双系统切换
  9. 不动点迭代求解方程数值解
  10. Python 自动化教程(1) 概述,第一篇 Excel自动化首篇