## 介绍
- 它只是我为了快速构建自己的项目而创建的,让我不必在每新建一个新项目都复制这些代码
- 它只是把日常工作中常用的工具和第三方包进行了整合,没有什么高深的技术,也不会有任何的性能影响
- 在项目中, 把常用的MySQL、HTTP、Redis、MongoDB等以模块化的方式按需加载
- 目前 main 分支一直在更新,后续功能完善后,将会提供精简版本的
## 当前go版本
- go 1.24
## 使用
它只需要简单的几步就可以快速创建一个项目
1. 初始化你的项目文件夹
```bash
go mod init your_project_name
cd your_project_name
```
2. 拉取 `greasyx`
```bash
go get -u github.com/soryetong/greasyx
```
3. 创建 `main.go`
```go
package main
import (
"github.com/soryetong/greasyx/gina"
)
func main() {
gina.Run()
}
```
4. 创建你的api文件
```bash
mkdir api_desc
touch api_desc/test1.go
```
```api
# test1.go
# 这个最终会生成对应的结构体,内容和Gin的保持一致
# 比如GET请求就需要`form`, 需要参数校验就使用 `binding`
type TestReq {
Page int64 `json:"page" form:"page"`
PageSize int64 `json:"pageSize" form:"pageSize"`
}
type TestResp {
Name string `json:"name"`
}
# 必须以 service 打头,会生成对应的接口、方法
# SystemTest 可以理解成一个模块
# Group Auth 表示这个模块属于哪个 Group
service SystemTest Group Auth {
# get 表示请求类型,支持get、post、put、delete, returns前表示请求参数, returns后表示返回参数
get test1 (TestReq) returns (TestResp)
post test2 returns
}
```
**Group 是指这个模块所属的组,目前支持 `Public`、`Auth`、`Token`**
> 它会将路由分成不同的组,从而让不同的组使用不同的中间件
`Public`:不使用任何中间件
`Auth`:使用 `Casbin` 权限校验和 `Jwt` token中间件,适用于管理后台
`Token`:使用 `Jwt` token中间件
生成的路由代码如下:
```go
publicGroup := r.Group("/api/v1")
{
// 健康监测
publicGroup.GET("/health", func(c *gin.Context) {
c.JSON(200, "ok")
})
// your_router
}
privateAuthGroup := r.Group("/api/v1")
privateAuthGroup.Use(middleware.Casbin()).Use(middleware.Jwt())
{
// your_router
}
privateTokenGroup := r.Group("/api/v1")
privateTokenGroup.Use(middleware.Jwt())
{
// your_router
}
```
📢注意:这一步不是必须的,只是有了api文件,就可以自动生成`Struct`、`Router`、`Handler`、`Logic`
5. 自动生成代码
```bash
# src表示api文件路径,output表示生成的代码路径
go run main.go autoc src=./api_desc output=./internal
# 或者直接运行,按照指令输入
go run main.go autoc
```
6. 加载Server和需要用到模块
```go
package main
import (
_ "your_project_name/internal/server"
"github.com/soryetong/greasyx/gina"
_ "github.com/soryetong/greasyx/modules/casbinmodule"
_ "github.com/soryetong/greasyx/modules/mysqlmodule"
)
func main() {
gina.Run()
}
```
解释:
- `_ "your_project_name/internal/server"` 表示加载你的服务,这个是必须的, 除此之外, 其他的都是按需加载的
详见[内置模块](#已内置的模块)
7. 运行项目

基于Go+Gin的Web项目脚手架,按模块自定义加载,可灵活快速搭建你的个性化Web项目框架 greasyx