{"id":18812199,"url":"https://github.com/mqenergy/go-skeleton","last_synced_at":"2025-06-21T05:37:29.648Z","repository":{"id":223313822,"uuid":"759611849","full_name":"MQEnergy/go-skeleton","owner":"MQEnergy","description":"基于Go语言和fiber框架的面向生产开发的高性能高并发的Web项目骨架","archived":false,"fork":false,"pushed_at":"2025-04-10T06:40:42.000Z","size":205,"stargazers_count":38,"open_issues_count":1,"forks_count":4,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-13T21:11:30.164Z","etag":null,"topics":["fasthttp","fiber","go-fiber","golang","skeleton"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MQEnergy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-02-19T01:45:04.000Z","updated_at":"2025-04-10T06:40:47.000Z","dependencies_parsed_at":"2025-04-13T21:11:09.016Z","dependency_job_id":"8136ed1e-600b-4116-85ff-22fe3b8ef8b9","html_url":"https://github.com/MQEnergy/go-skeleton","commit_stats":null,"previous_names":["mqenergy/go-skeleton"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MQEnergy/go-skeleton","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MQEnergy%2Fgo-skeleton","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MQEnergy%2Fgo-skeleton/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MQEnergy%2Fgo-skeleton/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MQEnergy%2Fgo-skeleton/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MQEnergy","download_url":"https://codeload.github.com/MQEnergy/go-skeleton/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MQEnergy%2Fgo-skeleton/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261070707,"owners_count":23105473,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fasthttp","fiber","go-fiber","golang","skeleton"],"created_at":"2024-11-07T23:30:30.130Z","updated_at":"2025-06-21T05:37:24.635Z","avatar_url":"https://github.com/MQEnergy.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-skeleton\n\n基于Go语言（版本：\u003e=v1.22.0）和fiber框架的高性能高并发的Web项目骨架\n\n# 持续更新中...\n\n基于go-skeleton + Reactjs + shadcn-ui 开发的面向出海的插件化电商系统 敬请期待~\n\n项目地址：[https://github.com/MQEnergy/mqshop](https://github.com/MQEnergy/mqshop)\n\n[![GoDoc](https://pkg.go.dev/badge/github.com/MQEnergy/go-skeleton)](https://github.com/MQEnergy/go-skeleton)\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue?link=MQEnergy%2Fgo-skeleton)](https://github.com/MQEnergy/go-skeleton/blob/main/LICENSE)\n[![codebeat badge](https://codebeat.co/badges/09ce2b03-b0b1-40eb-9ac7-b91bccdb8c0d)](https://codebeat.co/projects/github-com-mqenergy-go-skeleton-main)\n\n## 一、项目结构\n\n```\n├── LICENSE\n├── Makefile          # 构建\n├── README.md\n├── benchmark         # benchmark\n├── cmd\n│   ├── app           # 接口运行命令\n│   └── cli           # 命令行运行命令\n├── configs           # 配置文件\n├── database          # 数据表文件\n├── go.mod\n├── go.sum\n├── internal\n│   ├── app           # 模块目录\n│   ├── bootstrap     # 服务启动\n│   ├── command       # 命令行\n│   ├── middleware    # 中间件\n│   ├── request       # 请求参数绑定的结构体目录\n│   ├── router        # 路由\n│   └── vars          # 全局变量\n└── pkg\n    ├── cache         # 缓存类 redis sync.Map\n    ├── command       # 命令行接口定义\n    ├── config        # 配置加载类\n    ├── crontab       # 定时任务\n    ├── database      # 数据库类\n    ├── helper        # 帮助函数\n    ├── jwtauth       # jwt类\n    ├── logger        # 日志类\n    ├── oss           # aliyun oss上传\n    ├── response      # 接口返回类\n    ├── restyHttp     # 网络请求类\n    ├── upload        # 上传类\n    └── wecom         # 企业微信\n\n```\n\n#### 目前已集成和实现：\n\n- [X] 支持 [jwt](https://github.com/golang/jwt-go) Authorization token验证组件\n- [X] 支持 [cors](https://github.com/gofiber/contrib/cors) 跨域组件\n- [X] 支持 [gorm](https://gorm.io) 数据库操作组件\n- [X] 支持 [redis](https://github.com/go-redis/redis) cache组件\n- [X] 支持 [slog](https://github.com/samber/slog-fiber) 日志组件\n- [X] 支持 [controller、service、model、middleware、command](https://github.com/MQEnergy/go-skeleton/tree/main/internal/command) 命令行方式生成代码工具\n- [X] 支持 [casbin](https://github.com/casbin/casbin) rbac权限 集成于中间件中 [casbin.go](https://github.com/MQEnergy/go-skeleton/blob/main/internal/middleware/casbin.go)\n- [X] 支持 [viper](https://github.com/spf13/viper) yaml、json、toml等配置文件解析组件\n- [X] 支持 [validator](https://github.com/go-playground/validator) 数据字段验证器组件，同时支持中文\n- [X] 支持 [snowflake](https://github.com/bwmarrin/snowflake) 生成雪花算法全局唯一ID\n- [X] 实现 ip白名单配置 集成于中间件中 [whitelist.go](https://github.com/MQEnergy/go-skeleton/blob/main/internal/middleware/whitelist.go)\n- [X] 实现 [code](https://github.com/MQEnergy/go-skeleton/tree/main/pkg/response/code.go) 统一定义的返回码，[exception](https://github.com/MQEnergy/go-skeleton/tree/main/pkg/response/response.go) 统一错误返回处理组件\n- [X] 实现 [wecom](https://github.com/MQEnergy/go-skeleton/tree/main/pkg/wecom/wecom.go) 企业微信组件\n- [X] 实现 [oss](https://github.com/MQEnergy/go-skeleton/tree/main/pkg/oss/oss.go) 阿里云oss组件\n- [X] 增加swagger文档支持\n\n#### 下一步计划：\n\n- [ ] 支持 cron 定时任务\n- [ ] 支持 pprof 性能剖析组件\n- [ ] 支持 trace 项目内部链路追踪\n- [ ] 支持 [rate](https://pkg.go.dev/golang.org/x/time/rate) 接口限流组件\n- [ ] 支持 [grpc](https://github.com/grpc/grpc-go) rpc组件\n- [ ] 支持 [go-rabbitmq](https://github.com/MQEnergy/go-rabbitmq) 消息队列组件 基于rabbitmq官方 [amqp](https://github.com/streadway/amqp) 组件封装实现的消费者和生产者\n- [ ] 实现 ticker 定时器组件\n- [ ] 实现 mongodb 数据库连接\n\n## 二、运行项目\n\n```shell\n# 安装依赖\ngo mod tidy\n\n# web命令 e: 支持三种环境变量 p: 端口号（默认9527）\ngo run cmd/app/main.go [-e=dev|test|prod] [-p=9527...]\n\n# 查看帮助\ngo run cmd/app/main.go -h\ngo run cmd/cli/main.go -h\n\n# cli命令\ngo run cmd/cli/main.go [-e=dev|test|prod]\n\n# 热更新\n# 安装热更新\ngo install github.com/cosmtrek/air@latest\nair\n\n# 查看帮助\nmake help\n\n# 格式化代码\nmake lint\n\n# 打包成window\nmake windows\n\n# 打包成linux\nmake linux\n\n# 打包成macos\nmake darwin\n\n# 生成swagger文档\nmake docs\n# 访问文档\nhttp://127.0.0.1:9527/docs\n```\n\n## 三、基础功能\n\n配置文件存在于[configs](configs)\n\n### 1、全局变量\n\n在internal/vars目录中可查看全局可用的参数\n\n```go\nvar (\n    BasePath string              // 根目录\n    DB       *gorm.DB            // Mysql数据库\n    MDB      map[string]*gorm.DB // mysql多数据库操作\n    Redis    *redis.Client       // redis连接池\n    Router   *fiber.Router       // 路由\n    Config   config.Config      // 配置\n\tOnce     sync.Once\n)\n```\n\n### 2、基于gorm/gen生成model和dao\n\n```shell\n# 查看帮助\ngo run cmd/cli/main.go genModel -h\n\n# 命令示例：\n# -m: 数据表名称(不填是生成别名为default的数据库的全部模型)\n# -e: dev、test、prod(默认环境：dev) \n# -a: 数据库别名（在yaml配置文件中database.mysql.sources.alias里面配置）(默认：default)\ngo run cmd/cli/main.go genModel [-m=foo] [-e=prod] [-a=demo]\n```\n\n命令使用-a参数 会生成新的dao目录，\n\n参考文档：[https://gorm.io/zh_CN/gen/dynamic_sql.html](https://gorm.io/zh_CN/gen/dynamic_sql.html)\n\n1、在entity目录中定义模型的查询接口（按需使用）\n\n参考：[internal/app/entity/admin/admin.go](./internal/app/entity/admin/admin.go)\n\n代码如下：\n\n```go\ntype Querier interface {\n\t// SELECT * FROM @@table WHERE id = @id\n\tGetByID(id int) (gen.T, error)\n\n\t// SELECT * FROM @@table WHERE account = @account\n\tGetByAccount(account string) (*gen.T, error)\n}\n```\n\n2、在entity.go文件中引入数据表的相关接口，\n\n参考：[internal/app/entity/entity.go](./internal/app/entity/entity.go)\n\n代码如下：\n\n```go\nvar methodMaps = MethodMaps{\n    \"cn_admin\": { // 表名称\n        func(Querier) {}, // 扩展的查询接口 可多个\n        func(admin.Querier) {},\n    },\n    // ...\n}\n```\n\n### 3、创建command命令\n\n```shell\n# 查看帮助\ngo run cmd/cli/main.go genCommand -h\n\n# 命令示例 \n# -n: 命令行名称 \n# -d: 命令存放目录 支持无限极子目录 如：foo/foo \n# -s: 加载已经存在的服务 如：mysql,redis 格式：多个服务以英文逗号相隔 如：mysql,redis\ngo run cmd/cli/main.go genCommand -n=foo [-d=foo] [-s=mysql,redis]\n```\n\n### 4、创建controller\n\n```shell\n# 查看帮助\ngo run cmd/cli/main.go genController -h\n\n# 命令示例 -n: 命令行名称 -d: 命令存放目录 支持无限极子目录 如：foo/foo\ngo run cmd/cli/main.go genController -n=foo [-d=foo]\n```\n\n### 5、创建service\n\n```shell\n# 查看帮助\ngo run cmd/cli/main.go genService -h\n\n# 命令示例 -n: 命令行名称 -d: 命令存放目录 支持无限极子目录 如：foo/foo\ngo run cmd/cli/main.go genService -n=foo [-d=foo]\n```\n\n### 6、中间件\n\n1、通过命令创建中间件\n\n```shell\n# 查看帮助\ngo run cmd/cli/main.go genMiddleware -h\n\n# 命令示例 -n: 命令行名称\ngo run cmd/cli/main.go genMiddleware -n=foo\n```\n\n### 7、日志\n\n```go\nimport \"log/slog\"\n\nslog.Info(\"Info\")\nslog.Error(\"Error\")\nslog.Warning(\"Warning\")\nslog.Debug(\"Debug\")\n```\n\n### 8、验证器\n\n在controller中文件中直接调用Validate方法\n示例如下：\n\n```go\npackage backend\n\nimport (\n\t\"github.com/MQEnergy/go-skeleton/pkg/response\"\n\t\"github.com/MQEnergy/go-skeleton/internal/app/controller\"\n)\ntype FooController struct {\n\tcontroller.Controller\n} \n// IndexReq 请求参数绑定\ntype IndexReq struct {\n\tName string `form:\"name\" query:\"name\" json:\"name\" xml:\"name\" validate:\"required\"`\n\tId   int    `form:\"id\" query:\"id\" xml:\"id\" validate:\"required\"`\n}\n\n// Index ...\nfunc (c *FooController) Index(ctx *fiber.Ctx) error {\n    var params IndexReq\n    if err := c.Validate(ctx, \u0026params); err != nil {\n    return response.BadRequestException(ctx, err.Error())\n    }\n    return response.SuccessJSON(ctx, \"\", \"index\")\n}\n```\n\n### 9、响应体\n\n在[pkg/response/response.go](./pkg/response/response.go)文件中\n\n```go\n// 基础返回\nresponse.JSON(ctx *fiber.Ctx, status int, errcode Code, message string, data interface{})\n\n// 成功返回\nresponse.SuccessJSON(ctx *fiber.Ctx, message string, data interface{})\n// ...\n```\n\n### 10、数据迁移 migrate\n\n### 11、上传类\n\n参考：\n\n1、调用\n[internal/app/controller/backend/attachment.go](./internal/app/controller/backend/attachment.go)\n\n2、组件\n[pkg/upload/upload.go](./pkg/upload/upload.go)\n\n### 12、service查询数据\n\n查看[service/backend/auth.go](./internal/app/service/backend/auth.go)\n\n```go\nvar (\n    u         = dao.YfoAdmin\n)\nadminInfo, err = u.GetByAccount(reqParams.Account) // 这个是entity暴露的查询方法 可查看entity/admin/admin.go文件\n```\n\n```\ndao.{数据模型}.{查询方法}\n```\n\n### 四、单元测试\n\n### 五、格式化代码\n\n```shell\n# install\ngo install mvdan.cc/gofumpt@latest\n\n# run \ngofumpt -l -w .   \n```\n\n### 六、检查shadow变量\n\n```shell\n# install\ngo install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow\n\n# run path为shadow所在目录\ngo vet -vettool={path}/shadow ./cmd/app/main.go \n```\n\n### 七、静态分析\n\n```shell\n# install\ngo install go.uber.org/nilaway/cmd/nilaway@latest\n\n# run 根目录\nnilaway ./...\n```\n\n### 八、注意\n\n#### 1、air配置文件 .air.toml在不同环境下需要修改\n\n注意查看[.air.toml](.air.toml)文件\n\n### benchmark (Todo)\n\n```bash\nwrk -t12 -c1000 -d30s --script=benchmark/login.lua --latency http://127.0.0.1:9527/backend/auth/login\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmqenergy%2Fgo-skeleton","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmqenergy%2Fgo-skeleton","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmqenergy%2Fgo-skeleton/lists"}