Categorygithub.com/limitcool/blog
repositorypackage
0.0.0-20220809090601-c6f1323f9dc2
Repository: https://github.com/limitcool/blog.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

Cooooooool-Blog

项目介绍

个人自用的Go博客系统的后端服务,采用gin框架+mysql数据库构建,目前正在实现中。

引用框架项目地址
WEB框架: GinGin: https://gin-gonic.com/
ORM框架: GormGorm: https://gorm.io/
SQL数据库: Mysql8.0Mysql: https://www.mysql.com/
用户认证: Json Web TokenJwt-go: https://github.com/golang-jwt/jwt
验证码系统: base64Captchabase64Captcha: https://github.com/mojocn/base64Captcha
api文档生成: gin-swaggergin-swagger: https://github.com/swaggo/gin-swagger
配置文件解析: viperviper: https://github.com/spf13/viper
权限管理: CasbinCasbin: https://casbin.org/
Casbin-gorm-adapterCasbin-gorm-adapter: https://github.com/casbin/gorm-adapter
支付功能:GopayGopay: https://github.com/go-pay/gopay
雪花算法:SnowFlakeSnowFlake: https://github.com/bwmarrin/snowflake

填写配置文件

# configs/config.yaml
Server:
  RunMode: debug
  HttpPort: 8080
  ReadTimeout: 60
  WriteTimeout: 60
App:
  DefaultPageSize: 10
  MaxPageSize: 100
  LogSavePath: storage/logs
  LogFileName: app
  LogFileExt: .log
  # 上传服务
  UploadSavePath: storage/uploads
  UploadServerUrl: http://127.0.0.1:8080/static
  UploadImageMaxSize: 5  # MB
  UploadImageAllowExts:
    - .jpg
    - .jpeg
    - .png
  UploadMarkdownAllowExts:
    - .md
  QrCodeSavePath: storage/qrcode
  PrefixUrl: 127.0.0.1:8080
Database:
  DBType: mysql
  Username: username  # 填写你的数据库账号
  Password: password  # 填写你的数据库密码
  Host: host:3306 # 填写你的数据库地址
  DBName: blog
  TablePrefix:
  Charset: utf8
  ParseTime: True
  LogMode: info
  MaxIdleConns: 10
  MaxOpenConns: 30
Jwt:
  Secret: initcool # 密钥
  Issuer: blog.nmslwsnd.com
  Expire: 72000
Pay:
  AlipayPrivateKey: # 支付宝私钥
  AlipayAppId: 2021000119643838
  AlipayPublicKey: # 支付宝公钥
Redis:
  Host: 127.0.0.1:6379
  Password: 
  MaxIdle: 30 # 最大空闲连接数
  MaxActive: 0 # 在给定时间内,允许分配的最大连接数(当为零时,没有限制)
  IdleTimeout: 0 # 在给定时间内将会保持空闲状态,若到达时间限制则关闭连接(当为零时,没有限制)

启动项目

go run main.go
# swagger 初始化
swag init
# 默认接口文档地址
http://127.0.0.1:8080/swagger/index.html

功能列表

已实现功能未实现功能
JWT中间件链路追踪
数据库回调MarkDown文件绑定文章ID
验证码生成及校验日志中间件
登录,注册功能
文章增删改查
上传文件
api文档生成
接口限流
系统管理员识别
自定义验证器
casbin权限管理系统
支付宝支付
MarkDown渲染
标签系统

Swagger 注解:

# 需要确保导入了生成的docs/docs.go文件,这样特定的配置文件才会被初始化
_ "github.com/limitcool/blog/docs"
注解描述
@Summary摘要
@ProduceAPI 可以产生的 MIME 类型的列表,MIME 类型你可以简单的理解为响应类型,例如:json、xml、html 等等
@Param参数格式,从左到右分别为:参数名、入参类型、数据类型、是否必填、注释
@Success响应成功,从左到右分别为:状态码、参数类型、数据类型、注释
@Failure响应失败,从左到右分别为:状态码、参数类型、数据类型、注释
@Router路由,从左到右分别为:路由地址,HTTP 方法

Casbin 注解:

# Casbin-gorm-adapter 
# 即使使用的是Mysql数据库,Casbin-gorm-adapter也需要安装sqlserver及postgres依赖
go get gorm.io/driver/postgres
go get gorm.io/driver/sqlserver
# casbin数据库字段解析
- ptype: 类型: g代表角色继承关系,p代表路由访问控制策略
- v0: RoleID 用于判断用户组别
- v1: /api/v1/* 代表RoleID可以访问v1内的路由
- V2: GET 支持RoleID可以进行的访问方式

bootstrap初始化 注解:

# 在main.go下导入bootstrap
_ "github.com/limitcool/blog/bootstrap"
// 注册请求示例
{
    "username":"admin",
    "password":"password",
    "profile":{
        "desc":"个人信息描述",
        "img":"图片URL"
    }
}

air热重启

# 安装air
go install github.com/cosmtrek/air@latest
# 新建文件.air.conf
touch .air.conf
# 在.air.conf添加以下内容
go run main.go
# 运行air
air