rgin命令行工具–一键生成gin框架的开发脚手架
前言
在使用 Gin 框架进行开发学习的过程中,脚手架的搭建是一个常见且必要的步骤。尽管可以提前准备一个简单的脚手架模板并通过复制粘贴来快速启动项目,但这种方式往往需要对模块名称(如 mod name)等关键命名进行手动修改。然而,由于项目名称可能与代码中的某些变量名重复,导致无法简单地通过全局搜索替换(如 Shift + Ctrl + F)来一次性完成所有修改,反而需要逐一甄别和调整,增加了不必要的繁琐操作。
鉴于 Gin 框架本身以简洁著称,并未提供一键生成项目模板的命令行工具,因此,基于上述痛点,我开发了一个可以根据个人开发习惯生成通用模板的命令行工具。该工具不仅能够快速生成符合 Gin 框架开发规范的项目结构,还能灵活适配不同的命名需求,在一定程度上提高了开发效率。
值得一提的是,本文所介绍的方法并不仅限于 Gin 框架的脚手架生成。你可以基于本文的思路和方法,开发适用于其他常用框架或脚手架的个性化命令行工具,从而为日常开发工作提供更多便利。通过这种方式,开发者可以根据自身需求定制专属的模板生成工具,进一步优化开发流程,提升工作效率。
0、快速使用
如果有帮助到你,希望可以得到你的starヾ(≧▽≦*)o。
go install github.com/rosyrain/rgin
rgin #检查是否成功安装工具
rgin create -n projectName #通过更改projectName去生成项目脚手架
生成的开发脚手架参考了七米老师的bluebell项目 架构如下(需要设置相关配置mysql/redis便可启动预留的示例):
├─conf //存放配置文件
├─controller //句柄函数
├─dao //数据库
│ ├─mysql //mysql
│ └─redis //redis
├─logger //日志加载
├─logic //逻辑处理函数
├─middlewares //中间件,已配置jwt认证,令牌桶限流
├─models //模型定义
├─pkg //第三方库调用,jwt的具体相关功能实现,snowflask算法
│ ├─jwt
│ └─snowflask
├─router //路由设置
├─settings //配置加载
├─main.go //启动入口,相关配置初始化
├─DOckerfile //docker部署
└─wait-for.sh //docker部署时调用的验证脚本
1、项目初始化
本文将使用cobra库进行命令行工具的开发。相关cobra内容可在参考文献中查看。
go install github.com/spf13/cobra-cli@latest
cobra-cli init
go mod init github.com/rosyrain/rgin
#Ps:此处不使用rgin作为mode名是为了方便后续通过go install实现工具的下载适配
go mod tidy
如果提示cobra库不存在时,手动下载
go get github.com/spf13/cobra
2、项目结构设计(预设计)
rgin/
├── cmd/ // 命令行工具入口
├── create.go // 子命令create定义
│ └── root.go // 根命令定义
├── internal/ // 内部实现(功能的具体实现)
│ ├── generator/ // 代码生成逻辑
│ │ └── generator.go
│ ├── project/ // 项目结构定义
│ │ └── project.go
│ └── template/ // 模板文件加载
| ├──templates/ // 模板文件,放在此处是为了与embed进行适配
| ├──main.go.tmpl...
│ └── template.go
├── main.go
├── go.mod
├── go.sum
└── README.md
3、命令定义
①根命令
在cmd层可以进行相关的命令具体实现,项目初始化时会有一个根命令,具体设定在root.go文件下:
var rootCmd = &cobra.Command{
Use: "rgin",
Short: "Generate the development scaffolding of the gin framework",
Long: `Here's how to use it:
go install https://github.com/rosyrain/rgin
rgin create -n projectname`,
// Uncomment the following line if your bare application
// has an action associated with it:
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("==========\nWelcome to rgin,use `rgin create -n projectName` to create project.\n==========")
},
}
其中各个参数的含义如下:
- Use: 命令名
- Short:命令的简单功能介绍
- Long:命令的具体功能描述及如何使用
- Run:在使用命令时调用的功能函数
其他相关配置以及一些flags,args配置可跳转到参考文献自行学习,本文不作详细讲解
②子命令
cobra-cli add create #创建子命令
此时可以在cmd层发现多了一个create.go的文件,create子命令相关的配置可在此处进行设置
var createCmd = &cobra.Command{
Use: "create",
Short: "create template(by gin)",
Long: `rgin create -n projectname`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("create called")
if err := generator.GenerateProject(projectName); err != nil {
cobra.CheckErr(err)
}
fmt.Printf



被折叠的 条评论
为什么被折叠?



