{"id":13757665,"url":"https://github.com/MasterJoyHunan/gengin","last_synced_at":"2025-05-10T05:32:14.667Z","repository":{"id":41160083,"uuid":"501309201","full_name":"MasterJoyHunan/gengin","owner":"MasterJoyHunan","description":"gengin 一个生成 gin 框架的脚手架","archived":false,"fork":false,"pushed_at":"2024-05-10T03:37:44.000Z","size":179,"stargazers_count":32,"open_issues_count":0,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-10-29T20:17:59.689Z","etag":null,"topics":["gin","go-zero","go-zero-plugin","plugin"],"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/MasterJoyHunan.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}},"created_at":"2022-06-08T15:29:45.000Z","updated_at":"2024-08-24T14:21:07.000Z","dependencies_parsed_at":"2024-01-17T16:08:27.158Z","dependency_job_id":"55325133-c997-4de8-96af-ce3d66b50389","html_url":"https://github.com/MasterJoyHunan/gengin","commit_stats":{"total_commits":48,"total_committers":1,"mean_commits":48.0,"dds":0.0,"last_synced_commit":"7f62478cdf5ab0ed3195db08c7b157268a0184b0"},"previous_names":["masterjoyhunan/go-zero-gin-plugin"],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterJoyHunan%2Fgengin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterJoyHunan%2Fgengin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterJoyHunan%2Fgengin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MasterJoyHunan%2Fgengin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MasterJoyHunan","download_url":"https://codeload.github.com/MasterJoyHunan/gengin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253371076,"owners_count":21897998,"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":["gin","go-zero","go-zero-plugin","plugin"],"created_at":"2024-08-03T12:00:44.366Z","updated_at":"2025-05-10T05:32:14.660Z","avatar_url":"https://github.com/MasterJoyHunan.png","language":"Go","funding_links":[],"categories":["Tools and plugins for [go-zero](https://github.com/tal-tech/go-zero)"],"sub_categories":[],"readme":"## gengin 一个生成 gin 框架的脚手架\n\ngengin 基于 go-zero 开发，是一个 go-zero 的插件，只需定义 .api 文件，一行命令就可以生成整个项目的基础文件\n\n### 前言\n\n正所谓站在巨人的肩膀上，看的比较远。\n\n本项目基于 go-zero 开发的插件，只需定义 api 文件，即可生成 gin 框架工程目录，借鉴了 go-zero 的思想，\n配置大于约定。指在提高开发人员的工作效率，减少沟通成本\n\n使用本项目生成的代码，只会依赖 gin 框架，其他什么依赖都没有，非常简洁优雅\n\n### 为什么需要它\n\n你当然可以使用 goctl 生成一个 http 单体服务，但是你可能更习惯使用 gin 框架的老司机，\n在新项目你在纠结如何选型的时，到底是纠结使用 gin 搭建简单的服务，还是使用 go-zero 框架利用其完善的组件的时候，\n希望本项目对你有所帮助\n\n以下用户可以考虑使用该项目\n\n* 习惯使用 gin 框架\n* 希望每个项目都是使用一样的规范，一样的依赖，从而减少学习成本\n* 项目是一个简单的单体服务\n* 项目里面使用自己习惯的第三方库，可能不需要用到 go-zero 的组件如\n  * mysql\n  * redis\n  * logger\n  * 限流\n  * 熔断\n  * .......\n* 希望定义了一个 .api 文件，基础代码自动生成\n* 希望用到 go-zero 丰富的生态\n\n### 使用方法\n\n#### 安装\n\ngo 1.16 以下使用\n```sh\ngo get -u github.com/MasterJoyHunan/gengin\n```\ngo 1.16 及以上使用\n```sh\ngo install github.com/MasterJoyHunan/gengin@v1.7.2\n```\n\n#### 初始化一个 GO 项目\n\n```sh\nmkdir you-application\ncd you-application\ngo mod init you-app-pkg-name\n```\n\n#### 在项目下定义 you-app.api 文件\n\n[api语法指南](https://go-zero.dev/cn/docs/design/grammar)\n\nyou-app.api 文件内容示例\n\n```api\nsyntax = \"v1\"\n\ninfo(\n\ttitle: \"some app\"\n)\n\ntype bookRequest {\n    Name string `json:\"name\"` // 姓名\n    Age int `json:\"age\"`      // 年龄\n}\n\ntype bookResponse {\n    Code int `json:\"code\"` // 业务码\n    Msg string `json:\"msg\"` // 业务消息\n}\n\n@server(\n    jwt: Auth\n    group: book\n    middleware: SomeMiddleware,CorsMiddleware\n    prefix: /v1\n)\n\nservice someapp {\n    @doc \"获取所有书本信息\"\n    @handler getBookList\n    get /book (bookRequest) returns (bookResponse)\n\n    @doc \"获取书本信息\"\n    @handler getBook\n    get /book/:id (bookRequest) returns (bookResponse)\n\n    @doc \"添加书本信息\"\n    @handler addBook\n    post /book (bookRequest) returns (bookResponse)\n\n    @doc \"获取书本信息\"\n    @handler editBook\n    put /book/:id (bookRequest) returns (bookResponse)\n}\n```\n\n#### 在项目下生成 gin 项目\n\n```sh\ngengin xxx.api\n```\n\n#### 生成的目录结构如下\n\n```\n├─config          # 配置文件对应的 struct\n├─etc             # yaml 配置文件\n├─handler         # 控制器层\n├─internal        # 内部处理逻辑\n│  ├─response     # 统一返回\n│  └─translator   # 返回错误国际化\n├─logic           # 服务层\n├─middleware      # 中间件层\n├─routes          # 路由定义\n├─types           # 请求与相应的 struct\nyou-app.go        # main 文件\n```\n\n### 重新执行程序那些文件会重新生成\n\n```\n├─config          # 如果文件已存在，不会重新生成\n├─etc             # 如果文件已存在，不会重新生成\n├─handler         # 如果文件已存在，不会重新生成\n├─internal        # 如果文件已存在，不会重新生成\n│  ├─response     # 如果文件已存在，不会重新生成\n│  └─translator   # 如果文件已存在，不会重新生成\n├─logic           # 如果文件已存在，不会重新生成\n├─middleware      # 如果文件已存在，不会重新生成\n├─routes          # gengin生成的文件会重新生成，请不要修改。手动新增的文件不会\n├─types           # gengin生成的文件会重新生成，请不要修改。手动新增的文件不会\nyou-app.go        # 如果文件已存在，不会重新生成\n```\n\n### 注意事项\n\n* get 和 post 请求都是使用 from 接受参数.\n* 在 api 文件中定义 tag 为 path 的 tag 会转换为 uri，方便 gin 框架处理\n* 在 api 文件中定义 @server 下的 jwt 会自动转换为一个 middleware，需要手动选择自己的熟悉 jwt 框架自行处理\n* 在 api 文件中定义 @server 下的 group 使用驼峰命名，会自动分割文件夹，如：group=helloWord\n  * logic =\u003e logic/hello/word/some_logic.go\n  * handler =\u003e handler/hello/word/some_handle.go\n* 在 api 文件中定义 @server 下的 group 如果为空，则会放入对应的根目录，如： \n  * logic =\u003e logic/some_logic.go\n  * handler =\u003e handler/some_handle.go\n\n### 其他\n\n如果需要对 .api 文件生成 swagger 文档，请参考[https://github.com/zeromicro/goctl-swagger](https://github.com/zeromicro/goctl-swagger)\n\n如果觉得该项目对你有所帮助，请不要吝啬你的小手，帮忙点个 stars\n\n如果对本项目有更好的建议或意见，欢迎提交 pr / issues，或者联系本人 tanwuyang88@gmail.com\n\n再次感谢 [go-zero](https://github.com/zeromicro/go-zero)\n\n### 最佳实践\n\n[go-admin-template](https://github.com/topology-zero/go-admin-template)\n\n### 协议\n\n[MIT](https://github.com/MasterJoyHunan/gengin/blob/master/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMasterJoyHunan%2Fgengin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMasterJoyHunan%2Fgengin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMasterJoyHunan%2Fgengin/lists"}