代码拉取完成,页面将自动刷新
[toc]
一个开发Golang的快速脚手架项目!
技术栈
. tree ─╯
├── LICENSE
├── README.en.md
├── README.md
├── cld-cli
├── com # http 网络请求code + 返回方法函数
│ ├── code.go
│ └── response.go
├── conf # 配置文件
│ ├── webapp-prod-config.yaml
│ └── webappDevConfig.yaml
├── config # 配置结构体实例
│ └── config.go
├── controllers # 控制器 参数校验 调用业务层
│ ├── community.go
│ ├── files.go
│ ├── post.go
│ └── user.go
├── dao # 数据库操作封装
│ ├── community.go
│ ├── files.go
│ ├── post.go
│ └── user.go
├── database # 数据库链接 models定义数据表对应的结构体 key redis的业务Key
│ ├── keys
│ │ └── post.go
│ ├── models
│ │ ├── common.go
│ │ ├── community_models.go
│ │ ├── post.go
│ │ └── user_model.go
│ ├── mysql.go
│ └── redis.go
├── note # 一些小文档
│ ├── 一些库的使用细节.md
│ └── 一些标准.md
├── go.mod
├── go.sum
├── logic # 业务层代码
│ ├── community.go
│ ├── files.go
│ ├── post.go
│ └── user.go
├── logs # 日志存放位置
│ ├── error_web.log
│ ├── logger.go
│ └── web.log
├── main.go
├── makefile
├── pkg # 工具函数,不与任何业务代码耦合的工具代码
│ ├── bcrypt.go
│ ├── jsonwebtoken.go
│ ├── snowflake.go
│ ├── translator.go
│ ├── utils.go
│ └── validators.go
├── router # router
│ ├── middlewares # middle 存放 gin的中间件!
│ │ ├── authorization.go
│ │ ├── cldLogger.go
│ │ ├── cldRecover.go
│ │ └── cors.go
│ ├── modules # modules 存放不同业务模块的router!
│ │ ├── community.go
│ │ ├── files.go
│ │ ├── post.go
│ │ └── user.go
│ ├── parameters # parameters 路由器 控制层的参数校验使用的结构体!
│ │ ├── files.go
│ │ ├── pagination.go
│ │ ├── post.go
│ │ └── user.go
│ └── router.go
├── setup # 做一些环境的初始化
│ └── setup.go
├── sql # sql语句
│ └── create_table.sql
├── static # 本地存储的静态文件夹~ (动态的可有可无)
├── test # 测试代码!
│ ├── TestString2float_test.go
│ ├── customValidator_test.go
│ ├── testExif_test.go
│ └── testFile
│ └── test.jpg
app:
name: cld-quick-cli
version: 1.0.0
mode: debug # debug | release
port: 8888
machineID: 1
onlineTime: "2023-02-23"
staticBaseUrl: ./ # 前缀 指定是相对路径还是绝对路径 / 或者 ./
staticFileDirPath: static/ # staticBaseUrl 下的 文件路径
# staticBaseUrl+ staticFileDirPath = ./static/ 相对路径
# /User/XX/DATA + static/ = /User/XX/DATA/static/ 绝对路径!
log:
level: debug
filename: ./logs/web.log
err_filename: ./logs/error_web.log
call_skip: 0
max_size: 200
max_age: 20
max_backups: 7
compress: true
local_time: true
mysql:
host: xxx
port: xxx
username: xxx
password: xxxx
db_name: cld
charset: utf8mb4
parse_time: true
max_open_connes: 200 # 用于设置最大打开的连接数,默认值为0表示不限制。
max_idle_connes: 50 # 用于设置闲置的连接数。
redis:
host: xxxx
port: xxxx
db: 0
jwt:
token_expire_duration: 72 #token过期时间,单位小时
secret: "xx" # jwt 密钥
issuer: "xxxx" # 签发人
package router
import (
"cld-quick-cli/config"
"cld-quick-cli/router/modules"
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
// CreateServer 做一些配置工作!
func CreateServer() *http.Server {
// TODO 向gin里面注入自己的logger
router := gin.Default()
// TODO 一些路由服务初始化就在这里面!
modules.TestRouter(router)
server := &http.Server{
Addr: fmt.Sprintf(":%v", config.Config.App.Port),
Handler: router,
}
return server
}
因为要做一些Server的自定义操作!目前有热关机的操作!所以实例化了一个 http.Server ,gin框架的router当做Server的handler!
CreateServer 返回个 Server 实例,在Starter的时候可以拿去做一些灵活的自定义操作!
路由注册,依然是用 gin 的 engin 来控制! 比如上面的 modules.TestRouter(router)
modules
存放业务路由初始化!
middlewares
存放中间件模块
package modules
import "github.com/gin-gonic/gin"
func TestRouter(router *gin.Engine) {
r := router.Group("/test")
r.GET("/hello_world", func(context *gin.Context) {
context.JSON(200, gin.H{
"message": "hello world",
})
})
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。