cheetah 包含多种项目,gin-web、shell-ansible,gitbook文档等脚手架
猎豹的故事
猎豹(Cheetah)是地球上速度最快的动物,凭借其敏捷的动作和极速的奔跑能力,它能够迅速追上猎物,完成捕猎任务。猎豹的快速和高效不仅是它在自然界中的生存优势,也成为了现代技术领域中许多工具和框架追求的目标——快速、高效和简洁。
正如猎豹凭借速度和敏捷征服大自然,Cheetah 脚手架工具的设计理念就是为了让开发者能够像猎豹一样,快速、敏捷地启动和构建 Go 项目,省去繁琐的配置和重复性工作,让你专注于业务逻辑的实现。
项目介绍
Cheetah 是一个 Go 语言的脚手架工具,旨在帮助开发者快速构建和启动常见的应用程序架构和代码模板。它通过封装和自动化一系列常见的技术栈和开发流程,使开发者能够高效地启动项目,减少手动配置和重复劳动。
使用规范 Uber Go 语言编码规范
mvc
项目启动
go install github.com/swaggo/swag/cmd/swag@latest
swag init -g cmd/app/main.go
go run cmd/app/main.go
个人理解: golang 主推荐比较简单的代码,并且自由风格。所以,只要代码框架是OK的,随性写代码都行。
代码目录结构
.
├── bin # 生成的二进制文件
├── build # 构建相关的脚本或者内容
│ └── Dockerfile
├── cmd # 程序的入口
│ └── app # app1 取名例如前台就叫 front,后台叫 backend,一个目录一个入口
│ ├── app # app 固定词
│ │ ├── options # 处理选项
│ │ │ └── options.go # 处理选项,处理一些初始化操作
│ │ └── server.go # 基本上可以认为是入口函数
│ └── main.go # 入口函数,具体的实现都在上面的server之中
├── config # 默认配置文件
│ └── config.yaml # 默认配置文件
├── docs # 接口文档,主要是swagger
├── go.mod # go.mod
├── internal # 内部资源,外部不允许调用 请查看 https://golang.org/doc/go1.4#internalpackages
│ ├── config # 配置文件,主要就是设置一下配置的相关结构体之类
│ │ ├── config.go # 配置项
│ │ ├── db.go # 数据库的配置项
│ │ ├── log.go # 日志的配置项
│ │ └── server.go # 服务器配置项
│ ├── handler # handler函数,主要处理业务逻辑
│ │ └── health # 案例
│ │ ├── handler.go # handler函数
│ │ ├── res
│ │ │ └── response_code.go # 错误码,可注册
│ │ └── service.go # service层
│ ├── model # model层,数据结构,操作内容在repository
│ │ ├── health.go
│ │ └── model.go
│ ├── pkg # 跟上面的pkg一样的说法,不推荐,但是很多代码库有这个习惯,看个人使用,这里是可以其他代码库进行调用
│ │ ├── migration # migrate内容
│ │ │ ├── migration.go # migrate的初始化操作
│ │ │ └── model.go # model层
│ │ └── response # 响应内容
│ │ ├── common.go # 响应内容
│ │ └── response.go # 响应内容
│ ├── repository # 数据库操作
│ │ └── health # health内容
│ │ ├── client.go # 数据库操作客户端,以及对数据库的crud
│ │ ├── migrate.go # migrate的初始化操作
│ │ ├── mock.go # 测试mock数据
│ │ ├── repository.go # repository层,接口层
│ │ └── types.go # 定义常量等内容
│ └── server # 这里也可以改成api, 主要就是上面的入口函数调用的地方,其他的函数主要作用是插件,这里是主要处理逻辑部分
│ ├── migrate.go # 处理repository层的migrate
│ ├── router.go # 路由在这里,通过传参的方式把配置文件等服务传到handler进行使用
│ └── server.go # web框架入口
├── pkg # 跟上面的pkg一样的说法,不推荐,但是很多代码库有这个习惯,看个人使用,这里是可以其他代码库进行调用
│ ├── cors # 跨域
│ │ ├── config.go
│ │ ├── cors.go
│ │ └── utils.go
│ ├── database # orm,数据库相关,例如MySQL
│ │ ├── gorm.go
│ │ ├── mysql.go
│ │ └── sqlite.go
│ ├── generator # id生成器
│ │ └── id.go
│ ├── log # 日志库
│ │ └── log.go
│ └── pkg.go # pkg空文件,查看 https://github.com/golang-standards/project-layout/issues/10 只看讨论即可
└── README.md # readme内容
使用模块
| 功能 | 工具 |
|---|---|
| web框架 | github.com/gin-gonic/gin |
| 数据库2 | github.com/go-gorm/gorm |
| 日志 | go.uber.org/zap |
| 命令行 | github.com/urfave/cli/v2 |
| 配置 | github.com/spf13/viper |
| id生成器 | github.com/sony/sonyflake |
命令行工具
个人理解: golang 主推荐比较简单的代码,并且自由风格。所以,只要代码框架是OK的,随性写代码都行。
代码目录结构
按照 github.com/golang-stan… 规范进行目录结构设置
.
├── build # 构建golang二进制等操作
│ └── build.sh
├── cmd # 程序的入口
│ └── app # 应用名称
│ ├── app # app固定词
│ │ ├── options # 处理选项
│ │ │ └── options.go # 如不使用配置文件,可以在这里进行代码删除
│ │ └── server.go # 服务启动入口
│ └── main.go # 执行入口
├── config # 默认配置文件
│ └── config.yaml
├── docs # 文档相关
│ └── README.md
├── go.mod # go.mod
├── internal # 内部函数
│ ├── command # 执行command主要函数
│ │ └── command.go
│ ├── config # 配置文件
│ │ ├── common.go
│ └── └── config.go
└── README.md # readme
使用模块
| 功能 | 工具 |
|---|---|
| 日志 | go.uber.org/zap |
| 命令行 | github.com/urfave/cli/v2 |
| 配置 | github.com/spf13/viper |
ansible
- shell规范: google.github.io/styleguide/…
- ansible最佳实践: docs.ansible.com/ansible/2.8…
代码目录结构
- ansible的内容是通过shell去执行ansible,这样可以在执行ansible之前进行基础环境的准备
- 当前使用的是配置参数的方式,传参的方式如有需要,可以提issue,我进行补充
.
├── config # 配置文件目录
│ ├── check_config.sh # 检查配置文件是否配置正确
│ ├── config.ini # 给用户的配置文件
│ ├── config.sh # 默认配置文件,start.sh的执行顺序在ini之前
│ └── set_config.sh # 设置一些根据配置文件获得的变量
├── core # 主要函数内容
│ ├── common.sh # 工具内容,例如日志
│ └── gen_inventory_file.sh # 生成inventory内容
├── inventory # 被生成的文件,第一次执行是不存在的
├── playbooks # 剧本内容
│ ├── site.yml # site 文件
│ └── roles # 固定目录roles
│ └── base # demo
│ └── tasks
│ └── main.yml
├── README.md # README
└── start.sh # 入口函数