# fiber **Repository Path**: crush_p/fiber ## Basic Information - **Project Name**: fiber - **Description**: 基于go-fiber框架引入zap日志,gorm操作MySQL搭建的便捷框架。 php转go,项目中有PHP框架ThinkPHP的影子。 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2022-11-05 - **Last Updated**: 2024-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于fiber的通用项目框架 ## 使用说明 框架仅初始化了第三方库,对于第三方库的操作请自行查看其文档。 比如:gorm操作数据库,validator自定义约束,cron定时任务 ### 路由 做了版本控制,使得路由跳转有点多,可删除,只使用一个路由文件控制 ### 中间件 1. 把分页参数写进了中间件 ``` import "fiber/global" // 获取page page := c.Locals("page").(*global.Page) ``` ### 验证器 ``` // 封装不少函数进了helper,根据需求进行修改 import "fiber/helper" type UserRegister struct { Name string `form:"name" json:"name" validate:"required"` Mobile string `form:"mobile" json:"mobile" validate:"required,checkIdCard"` Password string `form:"password" json:"password" validate:"required"` } user := new(UserRegister) // 自带的绑定参数 if err := c.BodyParser(user); err != nil { // 强校验数据类型或body为空 // 暂时想到的是正则错误字符串,以便返回指定错误(前端先强校验一次可避免) // 后续根据需求看是否需要加上 return helper.Fail(c, err.Error(), global.QueryErrorCode) } // 验证器 if err := helper.ValidateStruct(user); err != nil { return helper.Fail(c, err.Error()) } ``` ## 目录说明 ``` |-- app // 项目逻辑代码 |-- controller // 控制器:加入了版本控制 |-- middleware // 中间件 |-- models // 数据模型 |-- validate // 验证器 |-- config // 全局配置文件 |-- global // 全局类 |-- helper // 助手函数类:如返回数据通过助手函数会将返回记录数据进日志 |-- register // 初始化类 |-- routes // 路由:拆分路由组,多项目以及项目过大时方便查看 |-- storage // 资源文件 |-- logs // 日志存放目录,不进git |-- static // 静态资源 |-- utils // 工具类:系统通用函数 |-- cron.go // 定时任务:后期开发 |-- server.go // 项目入口文件 |-- example.yaml // 配置文件 ``` ## 使用到的第三方包名 ``` github.com/gofiber/fiber/v2 // web框架 github.com/gofiber/websocket/v2 // websocket github.com/spf13/viper // 读取配置 go.uber.org/zap // 日志 gopkg.in/natefinch/lumberjack.v2 // 日志切割归档 gorm.io/gorm // ORM库 gorm.io/driver/mysql // mysql库 github.com/go-playground/validator/v10 // 验证器 github.com/go-co-op/gocron // 定时任务 github.com/go-redis/redis // redis ``` ## 导入第三方包过慢解决办法 ``` go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct ``` ## 未来版本 #### websocket gofiber/websocket 未测 #### 多语言... 需单独封装 ## 记录一下使用中与PHP不一样导致遇到的问题 #### 强校验content_type 取值方法不一样,要求前端或第三方按照指定规则进行请求 (PHP可以直接$_REQUEST) 请求参数类型严格校验,部分参数用户上传时填写的参数类型错误会直接导致程序错误 (前端严格校验或自定义错误返回) ``` Params // 从路由中取值 ParamsInt // 从路由中取整值 Query // 从请求query中取值 Body // 从请求body中取值 ``` #### 可能存在的问题 数据库操作只是浅测了一下,出了问题再说吧 websocket基于go-fiber,使用时基于文档引入即可