Giter Site home page Giter Site logo

skyformat99 / snake Goto Github PK

View Code? Open in Web Editor NEW

This project forked from go-eagle/eagle

0.0 1.0 0.0 638 KB

🐍 一款小巧的基于Go构建的开发框架,可以快速进行业务开发,遵循SOLID设计原则

License: MIT License

Makefile 1.23% Shell 4.02% Go 86.03% TSQL 3.85% HTML 4.21% Dockerfile 0.65%

snake's Introduction

🐍 snake

GitHub Workflow Status codecov GolangCI godoc Go Report Card gitmoji License

一款适合于快速开发业务的 Go 框架,主要是提供 API 服务。

项目中用到的设计**和原则,满足 "高内聚、低耦合",主要遵从下面几个原则

    1. 单一职责原则
    1. 基于接口而非实现编程
    1. 依赖注入
    1. 多用组合
    1. 迪米特法则

迪米特法则: 不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口

✨ 技术栈

  • 框架路由使用 Gin 路由
  • 中间件使用 Gin 框架的中间件
  • 数据库组件 GORM
  • 文档使用 Swagger 生成
  • 配置文件解析库 Viper
  • 使用 JWT 进行身份鉴权认证
  • 校验器使用 validator 也是 Gin 框架默认的校验器
  • 任务调度 cron
  • 包管理工具 Go Modules
  • 测试框架 GoConvey
  • CI/CD GitHub Actions
  • 使用 GolangCI-lint 进行代码检测
  • 使用 make 来管理 Go 工程
  • 使用 shell(admin.sh) 脚本来管理进程
  • 使用 YAML 文件进行多环境配置

📗 目录结构

├── Makefile                     # 项目管理文件
├── build                        # 编译目录
├── cmd                          # 脚手架目录
├── conf                         # 配置文件统一存放目录
├── config                       # 专门用来处理配置和配置文件的 Go package
├── db.sql                       # 在部署新环境时,可以登录 MySQL 客户端,执行 source db.sql 创建数据库和表
├── docs                         # Swagger 文档,执行 swag init 生成的
├── handler                      # 控制器目录,用来读取输入、调用业务处理、返回结果
├── internal                     # 业务目录
│   ├── cache                    # 基于业务封装的cache
│   ├── idl                      # 数据结构转换
│   ├── model                    # 数据库 model
│   ├── repository               # 数据访问层
│   └── service                  # 业务逻辑层
├── logs                         # 存放日志的目录
├── main.go                      # 项目入口文件
├── pkg                          # 一些封装好的 package
├── router                       # 路由及中间件目录
└── scripts                      # 存放用于执行各种构建,安装,分析等操作的脚本

🛠️ 快速开始

方式一

直接Clone项目的方式,文件比较全

TIPS: 需要本地安装MySQL数据库和 Redis

# 下载安装,可以不用是 GOPATH
git clone https://github.com/1024casts/snake

# 进入到下载目录
cd snake

# 生成本地环境配置文件
cp config.sample.yaml config.local.yaml

# 编译
make build

# 运行
./scripts/admin.sh start

方式二

使用脚手架,仅生成基本目录d, 不包含pkg等部分公共模块目录

# 下载
go get github.com/1024casts/snake/cmd/snake

cd $GOPATH/src
# 使用
snake new snake-demo -d ./
# 或者 
snake new github.com/foo/bar -d ./

💻 常用命令

  • make help 查看帮助
  • make dep 下载 Go 依赖包
  • make build 编译项目
  • make swag-init 生成接口文档
  • make test-coverage 生成测试覆盖
  • make lint 检查代码规范

🏂 模块

用户模块

  • 注册
  • 登录(邮箱登录,手机登录)
  • 发送手机验证码(使用七牛云服务)
  • 更新用户信息
  • 关注/取消关注
  • 关注列表
  • 粉丝列表

📝 接口文档

http://localhost:8080/swagger/index.html

📖 开发规约

🚀 部署

单独部署

上传到服务器后,直接运行命令即可

./scripts/admin.sh start

Docker 部署

如果安装了 Docker 可以通过下面命令启动应用:

# 运行
docker-compose up -d

# 验证
http://127.0.0.1/health

Supervisord

编译并生成二进制文件

go build -o bin_snake

这里日志目录设定为 /data/log 如果安装了 Supervisord,可以在配置文件中添加下面内容(默认:/etc/supervisor/supervisord.conf):

[program:snake]
# environment=
directory=/home/go/snake
command=/home/go/bin_snake
autostart=true
autorestart=true
user=root
stdout_logfile=/data/log/snake_std.log
startsecs = 2
startretries = 2
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=10
stderr_logfile=/data/log/snake_err.log
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=10

重启 Supervisord

supervisorctl restart snake

📜 CHANGELOG

🏘️ 谁在用

💬 Discussion

📄 License

MIT. See the LICENSE file for details.

snake's People

Contributors

appleboy avatar flw-cn avatar qloog avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.