# create-gin-app **Repository Path**: nihilwater/create-gin-app ## Basic Information - **Project Name**: create-gin-app - **Description**: 这是一个简易的gin 脚手架,持久化框架使用的是gorm,数据库连接使用的是mysql,包含自动将表结构映射成struct的插件。 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-03-20 - **Last Updated**: 2021-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Create Gin App ## 摘要 这是一个简易的gin 脚手架,持久化框架使用的是gorm,数据库连接使用的是mysql,包含自动将表结构映射成struct的插件。 ## 目录结构 ```shell . │ main.go (程序入口) ├─config (配置文件夹) │ app.json (配置文件) │ ├─controller (在这里面写业务实现的具体方法) │ helloController.go │ userController.go │ ... │ ├─dao(这个文件夹会用与存放由table 生成的struct们) │ userDb.go │ ... │ ├─mdware (中间件) │ Cors.go (跨域配置) │ ├─model(数据库操作类) │ init.go(包含数据库初始化工作) │ userModel.go │ ... │ ├─plugin(插件,这是一个单独的go module,以便在项目发生部分错误时,仍可以运作) │ table2struct_test.go(表生成struct 插件) │ ├─router(路由文件) │ init.go(是所有路由的父级,包含通用方法) │ helloRouter.go │ userRouter.go │ ... │ └─tool (工具) config.go (配置读取) ``` ## 1.配置项目基本信息 0. 配置项目基本信息 我们可以在`./config`中找到项目的配置文件`app.json` ```json { "app_name": "create-gin-app", "app_mode": "debug", "app_host": "localhost", "app_port": "8090", "db": { "db_user": "user", "db_pass": "123456", (密码) "db_addr": "127.0.0.1", "db_port": "3306", "db_name": "test" } } ``` ## 2.注册路由 首先在项目的router文件中新建一个 xxxRouter.go 文件,例如一个helloRouter.go ```go package router type HelloRouter struct { baseRouter } func (hr *HelloRouter) setupRouter() { hr.Router.GET("/hello", func1) hr.Router.GET("/sayhello", func2) } ``` 这个文件里要包含,一个包含 baseRouter的结构体,并使用setupRouter,填写路由和对应操作。 当你有了在controller 之后,它是这个样的。 ```go package router import ( "create-gin-app/controller" ) type HelloRouter struct { baseRouter } func (hr *HelloRouter) setupRouter() { hr.Router.GET("/hello", controller.Hello) hr.Router.GET("/sayhello", controller.SayHello) } ``` 在此之后你可以在main中使用`RegisterRouter(new(XxxxRouter), egine.Group("/xxxx"))`的语句,将路由注册到程序中。 ## 3.添加数据库操作 假设现在有一个名为`test`数据库,里面有一张`user`表,里面一共有三个字段,`[id,username,password]` 你可以用项目自带的struct生成工具生成struct `User`到dao中,然后再model中添加数据库操作,比如查询所有用户。 ```go package model import "create-gin-app/dao" func GetALLUsers() []dao.User { var res []dao.User db.Model(&dao.User{}).Find(&res) return res } ``` ## 4.添加服务 添加服务就是在`./controller`目录下添加路由对应的方法 例如,现在衔接数据库操作,要将查询到的所有用户通过"/user/getall" 被客户端获取,那么就可以在controller添加一个userController,并且写入一下代码。 ```go package controller import ( "create-gin-app/model" "github.com/gin-gonic/gin" ) func GetAllUsers (context *gin.Context){ context.JSON(200, gin.H{ "data" : model.GetALLUsers(), }) } ``` 同时添加新的路由信息 ```go package router import "create-gin-app/controller" type UserRouter struct { baseRouter } func (ur *UserRouter)setupRouter() { ur.Router.GET("/getall", controller.GetAllUsers) } ``` 并进行注册 `RegisterRouter(new(UserRouter), egine.Group("/user"))` ## struct自动生成 假设现在有一个名为`test`数据库,里面有一张`user`表, 可以使用`./plugin/table2struct_test.go`生成一个与之对应的struct结构体! 首先将`./plugin/table2struct_test.go`里的`tableNameList` 内容修改为`"user"` 然后点击运行测试即可。 **你可以修改的参数** config: 生成代码默认使用`./config/app.json`中的数据库信息,如果你要单独指定数据库请自己定义config outfile: 默认使用dao文件作为输出的文件夹 ## 跨域配置 在中间件中有着 `Cors.go` 文件,里面使用默认配置所有的ip都可以进行跨域资源请求,你可以添加到全局,例如在main中添加这样的语句 ```go egine.Use(mdware.Cors()) ``` 也可以单独配置给特定路由,比如,只允许"user/getall"有跨域请求的功能,就可以在userRouter中进行限制 ```go func (ur *UserRouter)setupRouter() { ur.Router.GET("/getall", mdware.Cors(), controller.GetAllUsers) } ```