cheetah 一个集成多种框架的golang脚手架

4 阅读4分钟

github.com/go-cheetah/…

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
数据库2github.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

代码目录结构

  1. ansible的内容是通过shell去执行ansible,这样可以在执行ansible之前进行基础环境的准备
  2. 当前使用的是配置参数的方式,传参的方式如有需要,可以提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                      # 入口函数

更多其他的,可以打开项目进行查看