- sql结果集无限级、有限级树形化
1.gorm 的 sql 扫描函数 Find、Scan查询结果一键树形化,解决数据需要树形化结果的业务场景.
2.sql结果树形化反射扫描器属全球首款,欢迎使用、反馈意见,详情参见 常用开发模块 附带文档.
3.其他地方部分代码进行了简化.
4.本项目后续将开发附带的 admin系统(基于iview前端框架+ginskeleton).
- websocket 增强大并发环境消息发送时的安全性 :
1.解决大并发环境下,ws消息发送报错问题:concurrent write to websocket connection .
2.对原始消息发送函数进行了独立封装,发送前后加锁处理,保证程序消息出口归一.
- websocket 消息广播函数完善 :
1.ws 广播函数(BroadcastMsg)可能被不同的逻辑同时调用,由于操作的都是 Conn ,为了保证并发安全,因此加互斥锁.
- websocket 隐式自动心跳功能优化 :
1.ws客户端掉线、主动关闭后,心跳包则同步停止,避免先前逻辑中一直检测,直到超过失败最大次数(默认4次)才停止.
- websocket广播消息功能修复 :
1.连接成功响应消息格式由文本型转为 json 格式的文本.
2.修复向全部在线客户端广播消息函数(BroadcastMsg)超时参数设置有误的bug.
-
相关依赖包更新 :
1.gormv2 系列依赖包更新至最新版.
2.表单参数验证器更新至最新版. -
数据库功能升级,支持多类型(mysql、sqlserver、postgresql)数据库同时连接到多个不同服务器的数据库 :
1.解决复杂场景不同类型数据库有多个不同源的连接,详情参见单元测试,TestCustomeParamsConnMysql 函数代码段
gormv2单元测试. -
增加项目目录结构介绍
- goCurl 包升级 :
1.修复下载命令(Down)一个bug,该bug主要由被下载的文件没有具体后缀引发,详情:https://gitee.com/daitougege/GinSkeleton/issues/I2A2Q0
2.goland 终端执行 go mod tidy ,自动更新相关依赖包,解决此bug.
- gormv2 包升级 :
1.相关的依赖包修复了使用复合主键创建关联记录的问题.
2.goland 终端执行 go mod tidy 可自动更新、整理、依赖包.
- gormv2 封装层增强 :
1.gormv2 包查询没有数据,则会爆出错误(涉及到函数主要有:first、last、take),本次更新屏蔽此错误,我们认为查询无数据又不是代码执行错误,这里不应该是错误.
2.涉及到的问题详情:go-gorm/gorm#3789 此 issue 所反映的问题就是我们本次更新解决掉的.
- rabbitmq单元测试bug修复 :
1.修复test/rabbitmq_test.go
单元测试文件 import 部分引入包大小写问题导致的bug,详情:https://gitee.com/daitougege/GinSkeleton/issues/I27DPC
- 功能完善 :
1.增加主线逻辑解耦文档说明,请按照自己的项目实际做选择:低耦合或者零耦合.
2.其他地方主要是注释说明,更新描述,更加容易理解.
- 功能完善 :
1.gormv2
相关的全局变量在没有初始化就直接调用时,进行了拦截与提示.
2.主线文档更新,便于新手更加容易阅读、上手使用.
- 功能完善 :
1.移除tb_users
model中的一处调试信息.
- 功能完善 :
1.简化v1.3版本中遗留的tb_users
查询代码.
- 功能增强 :
1.为雪花算法(snowflake)封装全局变量,方便分布式场景随时随地获取唯一id
2.本次更新主要为后续我们正在测试、验证的分布式数据库方案提供基础功能.
- 隐藏bug修复:
1.redis
封装层由于含有init
函数,该函数的调用会优先于框架代码之前, 移除了该部分代码段含有的框架外部变量.
2.同时检查了其他包的封装层,避免存在同类问题. - 功能完善:
1.token
生成的有效期、刷新时的延长时间全部从常量转移到配置项, 程序编译后, 相关参数的调节更灵活.
- bug修复:
1.由于tb_users 表字段 token 在新版中在独立的表处理,相关查询sql没有及时移除该字段导致一处bug发生. - 功能完善:
1.项目集成的测试用例路由、api接口文档完善.
1.配置文件将原本测试阶段的信息具体配置项恢复至默认配置项,避免开发者默认运行此项目找不到原始配置地址报错.
2.Mode基类调整名称为BaseModel,将基类名称规范化.
3.由于新版本引入了新的包删除了旧包,可以使用go mod tidy
快速安装、清理项目依赖包.
1.由于数据库操作方式切换为
gorm v2
, 相关的读写分离方式使用了该作者提供的方案(dbresolver), 读写分离方案中又使用了go1.15最新的接口实现方式.
2.基于以上原因,该项目操作数据库必须使用go1.15及以上版本,请下载go1.15最新版:https://studygolang.com/dl
3.本次版本号变化无关代码,请按照日志说明务必升级go语言至1.15版本才能稳定使用本项目.
1.
gorm v2
集成至本项目骨架, 测试、验证相关功能,并提交pr(被合并、也有被close)协助作者改进了几个bug .
2.对项目骨架中频繁使用的几个变量,进行了全局初始化,主要包括:日志、配置文件、gorm驱动,从而使程序的底层代码得到简化.
3.本次升级之后原本使用原生sql
操作数据库相关的全部代码被移除,新版本将切换到gorm v2
.
4.针对response
响应模块增加了语法糖函数,使代码得到了精简,降低耦合,相关调用处整体进行了更新.
5.相关的数据库demo文件,统一了数据库名、字段名,项目骨架调用处同步更新,因此该版本需要测试数据库时,需要重新导入database/
目录下的数据库文件.
6.后端web路由组名称更改:Admin -> admin ,相关测试用例文档也已经同步更新.
7.总之, v1.4.00 是一个代码改动较大的版本,尤其是使用方面简化了很多调用方式.
V 1.3.06 2020-10-16
1.
cobra
包升级至最新版, 相关的文档同步更新.
2.redis
部分修正一个有歧义的函数名: ReleaseOneRedisClientPool -> ReleaseOneRedisClient .
V 1.3.05 2020-10-15
1.
response
响应中心增加常用的快捷函数(语法糖函数).
2.配置文件管理中心(app/utils/yml_config)
文件变化监听事件升级、完善,避免vipver
包文件变化事件回调函数触发两次的小问题.
V 1.3.04 2020-10-10
1.
nginx
配置部分增加https
配置与说明.
V 1.3.03 2020-10-08
1.对配置文件
(config/config.yml)
管理中心(app/utils/yml_config)
进行了升级,相关键值凡是调用都会触发同步缓存功能,进而提升性能, 同时避免了配置文件多次调用额外增加的io开销.
2.增加了配置文件(config/config.yml)
变化的监听事件,以便清除原有的缓存,当下次调用时,自动缓存最新值(备注:针对一次性加载项无效.例如:程序端口,项目启动时只初始化一次,不会有二次调用,因此无效.).
3.该功能基于viper
包实现,windows
系统无法实时刷新,文件变化监听事件有滞后,linux
系统可实时刷新.
V 1.3.02 2020-09-29
1.主线文档完善,主要对验证器定义的数据绑定到 context 上下文进行了补充说明.
V 1.3.01 2020-09-22
1.项目文档排版进行了微调.
2.httpClient 和 zap日志 文档修正了一些描述不准确问题.
V 1.3.00 2020-09-21
1.为项目日志(nginx 的 access.log、error.log,goskeleton.log)提供了顶级解决方案.
2.修复注册验证器、登录验证器校验的密码字段pass长度不一致问题.
3.其他地方格式化、规划化了代码书写格式.
V 1.2.27 2020-09-08
1.文档更新,增加 FAQ 常见问题汇总、答疑文档.
V 1.2.26 2020-09-04
修复一处bug,兼容正常启动模式和单元测试模式:
1.运行命令:go run abc/xx.go 和 单元测试命令: go test abc/xxx.go 在golang中获取的可执行文件路径不一致,如果用户目录含有test就会导致了定位根目录出现错误. 本次更新修复此问题.
2.goCurl包更新至 v1.2.4,主要是文档方面的细节完善.
V 1.2.25 2020-09-03
1.进程信号监听,凡是收到结束进程信号时, 在退出之前增加日志记录功能.
2.文档布局进行了调整, 比较繁琐的地方独立为一个文件,使主文档显得简洁.
V 1.2.24 2020-09-02
1.增加
内用占用
分析报告,至此整个项目骨架的性能分析全部结束.
V 1.2.23 2020-09-01
1.开始启动项目骨架全方位性能分析.
2.路由文件:api 和 web 调整,调试阶段增加pprof
系列路由,方便开发阶段性能分析.
3.goCurl 包升级到最新版v1.2.3
,一切从快速应用的角度出发,提供了全新的使用文档,代码进行了增强与精简.
4.本次版本更新后,请记得使用go mod tidy
清理、整理相关引用包,保持项目干净利落.
V 1.2.22 2020-08-27
1.nginx运维文档更新,本次更新主要将 zhangqifeng/nginx_vts 镜像基于alpine3.12 重新编写,大幅度减小体积,更便于快速拉取使用.
V 1.2.21 2020-08-24
1.数据库(mysql、sqlserver、postgresql)增加读写分离配置支持,详情参见:config/config.yml 数据库配置部分.
2.修复上个版本中的一个Bug ,postgresql 数据库驱动初始化变量调用了 sqlserver 代码部分中的变量.
3.其它一些小地方进行了规范与完善.
V 1.2.20 2020-08-23
1.增加 (sqlserver)测试用例,本次更新主要是兼容
sqlserver2008
,截止目前版本号>=2008的全部sqlserver都已经支持.
2.增加 (postgreSql)测试用例.
3.文件上传部分代码进行了规范化,相关配置项增加使用细节说明.
4.配置文件 config/config.yml , 规范化被遗漏的 APP_DEBUG 为: AppDebug .
V 1.2.10 2020-08-20
1.验证码封装完成,相关文档
2.Redis 数据库底层继续增强,在网络出现短暂的断网情况下,程序能够自动等待、重连、从小异常中恢复,该功能 mysql 早已经支持。
3.config>config.yml > AppDebug: true
则所有的日志全部打印到控制台,AppDebug: false
则所有日志打印到日志文件:storage/logs
.
4.本项目骨架的内核gin
框架更新至最新版本 v1.6.3 ,官方说:"进一步提升context性能".
5.项目在升级的过程中,会出现旧版本包的舍弃,请记得在goland
终端执行go mod tidy
清理、整理项目依赖包.
V 1.2.01 2020-08-19
1.配置文件
config.yml
中 log 配置项修复一处被遗漏的路径大写问题。
V 1.2.00 2020-08-18
1.项目代码进行了一次全面规范化 , 对整个项目的代码严谨性进行了一次全面的梳理,部分地方做了精简。
2.本次更新较多,很多都是底层服务逻辑代码,使用上和原版本相差无几,详情参见文档.
V 1.1.00 2020-08-13
1.集成高性能日志包 zap , 文档详情
2.config/config.yaml 配置文件有关程序默认端口、运行模式都做了修改,请注意查看相关配置项。
V 1.0.26 2020-08-11
1.增加项目上线后,运维监控方案文档,终于,本项目从开发到上线运维形成了闭环。
V 1.0.25 2020-07-31
1.在线演示系统 ,V1.0 基本完成开发,后续将继续优化、深度开发相关功能,更好的测试 GoSkeleton 综合性能指标。
V 1.0.24 2020-07-23
1.
Websocket
完善更多错误捕获,增加写入超时配置参数。
V 1.0.23 2020-07-16
1.
SQL
场景继续增强,将预编译命令独立,主要解决大批量sql重复执行,导致预编译sql太多,mysql拒绝继续执行命令的错误。
2.封装了事务操作,补充相关的 sql单元测试 和 sql示例文档
V 1.0.22 2020-07-09
1.Redis增加单元测试示例,并修复配置文件一处bug。
2.调整程序异常log打印方式,由 log.Panic 调整为 log.Println , 代码出错尽量不退出程序。
V 1.0.21 2020-06-23
1.httpClient客户端包版本更新,采集不同编码类型的简体中文网站时,更加友好。
V 1.0.20 2020-06-08
1.增加 Aop 面向切面编程功能,简洁高效地实现控制器相关函数的
Before
和After
回调。
2.本项目骨架实现Aop
通过匿名函数+巧妙的回调模拟实现,非常轻巧。
3.增加项目骨架启动时,检查程序依赖的必须目录、文件,主要有:config/config.yaml、Public、Storage/logs/
V 1.0.19 2020-06-05
1.增加函数级别的
发布、订阅
功能 查看详情 ,该模式主要将与主业务有弱关联关系的一组子业务进行了简单解耦。备注:如果只是一个子业务需要异步,没有必要用这种方法。
2.增加nginx
与supervisor
部署相关的文档。
V 1.0.18 2020-06-03
1.
jwt
增强,控制一个账号、密码同时能拥有有效的token数量,以便支持一个账号多人登录。
2.详细配置参见app\global\consts\consts.go
,JWT
部分。
3.token
部分与tb_users
逻辑交互代码更新,主要有登录生成token、刷新token
、用户更改密码,重置相关的token
使之失效,用户删除数据,同步删除相关的token表数据。
4.dataBase\db_demo_mysql.sql
同步更新,增加tb_oauth_access_tokens
表,数据库必须及时更新此表。
5.特别提醒:httpClient
包的引用地址发生变更,主要为了解决和原库命名冲突,如果下载的项目骨架报错,请更新代码重新运行。
V 1.0.17 2020-05-28
1.rabbitmq文档 本次更新主要解决消费者端在阻塞状态处理消息时可能发生断网、服务端重启导致客户端掉线的情况。
2.增强了消费者端断线自动重连逻辑,增强程序自身的稳定性,增加错误回调函数。
3.针对消息队列编写了全量的单元测试 rabbitmq全量单元测试
V 1.0.16 2020-05-25
1.Cli命令模式包(Cobra)集成完成,可以创建非常强大的非http接口类服务。
2.详情参见Cobra文档
V 1.0.15 2020-05-23
1.消息队列rabbitmq开发完成,为了更好的使用rabbitmq我们编写了非常详细的使用指南,可以快速上手使用消息队列。
2.详情参见rabbitmq文档
V 1.0.14 2020-05-13
1.修复bug:表单参数验证器在一次请求之后没有及时释放上次请求相关的属性值。
V 1.0.13 2020-05-12
1.增加 httpClient客户端 ,基于goz改造,感谢goz(github.com/idoubi/goz.git)原作者提供了大量的基础代码,相比原版特色如下:
1.1 增加了文件下载功能,支持超大文件下载。
1.2GetBody()
返回值由原版本中的string
格式数据调整为io.ReaderCloser
,将专门负责处理流式数据,因此代码逻辑处理完毕,必须使用io.ReaderCloser
接口提供的Close()
函数手动关闭。
1.3 原版本的GetBody()
被现有版本GetContents()
代替,由于是文本数据,一次性返回,程序会自动关闭相关io资源。
1.4 删除、简化了原版本中为数据类型转换而定义的ResponseBody
,本版本中使用系统系统默认的数据类型转换即可。
1.5 增强原版本中表单参数只能传递string、[]string的问题,该版本支持数字、文本、[]string等。
1.6 增加请求时浏览器自带的Headers
默认参数,完全模拟浏览器发送数据。
1.7 增加被请求的网站数据编码自动转换功能,采集网站时不需要考虑对方站点的编码类型(gbk系列、utf8),全程自动转换。
V 1.0.12 2020-05-08
1.根据大家反馈,按照
golang
项目标准布局梳理项目组织结构,相比原来结构稍显复杂,但是当项目业务较大时,这种布局会更加灵活。
2.入口文件位置调整:Cmd/Web/Main.go,建议用于后台管理类站点使用;Cmd/Api/Main.go,建议用于门户网站类站点使用;
3.相关文档随着项目结构调整同步更新。
V 1.0.11 2020-04-30
1.
SqlServer
、Mysql
驱动初始化代码相似度比较高,因此进行了优化合并。
2.SqlServer
、Mysql
操作基类进一步完善,规范日志记录。
3. 增加项目骨架使用文档。
V 1.0.10 2020-04-29
1.
websocket
功能开发完成,特色如下:
1.1 屏蔽底层繁琐的基础设置,使用超级简单,对于开发者只需要关注OnOpen
、OnMessage
、OnError
、OnClose
事件即可。
1.2 严格按照websocket
协议实现,服务器、浏览器自动隐式维护心跳,开发者只需要关注业务的核心数据交互,无需额外维护任何形式的心跳数据包。
1.3websocket
服务模块默认不开启,若有需要请在配置文件config/config.yaml
中开启。
2SqlServer
数据库驱动以及相关Api封装完成,像其他数据库一样具有完善的连接池,无感知调用。
V 1.0.09 2020-04-25
1.增加用户
token
刷新接口,精简刷新逻辑代码。
2.完善用户密码加密存储方式,同步更新dataBase/db_demo_mysql.sql
文件。
V 1.0.08 2020-04-24
1.增加SnowFlake算法,用于全局生成唯一ID,便于业务使用。
2.封装MD5函数,方便快速调用。
3.文件上传公共模块完善,存储文件自动使用SnowFlake、MD5算法生成全局唯一名称存储。
V 1.0.07 2020-04-23
1.自定义错误常量包名调整:Errors——>MyErrors,避免和系统错误包名称混淆。
2.文件上传公共模块示例代码完善。
3.路由增加静态资源处理以及相关说明。
4.验证器示例代码进一步简洁清晰化、同时增加了最常用的注释说明(参见:app\http\validator\users\register.go)。
V 1.0.06 2020-04-22
1.完善文件上传公共模块,增加文件上传最大值限制,允许的文件
mimetype
类型设置。
2.文件上传验证器同步增加验证条件相关的代码、全部错误代码、提示消息、yaml配置项等。
3.验证器初始化加载顺序由原来的验证器调用时加载调整为程序启动时加载。
4.增加跨域,默认开启,该功能与nginx
跨域二选一。
V 1.0.05 2020-04-20
1.增加
json
统一返回逻辑。
2.用户模块核心逻辑全部完成(注册、登录、token
授权、token
认证、CURD
等操作)。
3.全局常量增加CURD
常用的列表。
4.增加Service
层逻辑,并提供相关的示例代码。
5.继续精简代码,使本项目骨架逻辑主线更加清晰,快速上手。
6.更新本项目所必须的数据库db_demo_mysql.sql
文件。
7.精简代码,基本的业务操作只保留tb_users
表的完整操作示例代码。
8.增加文件上传公共模块,供任何有需要上传文件的业务模块调用。
9.日志存储路径调整为全局变量统一定义。
V 1.0.04 2020-04-19
1.路由——>中间件——>表单验证器——>控制器 上下文数据一致性开发完成。
2.验证器结构调整,将业务部分和系统核心部分分离,开发者只需更多关注业务即可。
3.增加项目骨架所需的demo数据库。
V 1.0.03 2020-04-17
1.增加
linux
环境chan signal
监听信号值,使程序在退出时,更加优雅,资源的释放更加完善。
V 1.0.02 2020-04-16
1.容器、事件注册器调整命名规范,增加模糊处理函数。
V 1.0.01 2020-04-15
1.增加容器,将一些比较繁琐的功能模块率先注册在容器,方便后续调用。
2.表单参数验证器首先注册在容器,避免在路由模块不停地引入表单验证器造成该文件过于庞大。
3.函数类事件精简代码,删除原有的一个键对应多个事件的逻辑,目前设置为键值一一对应关系。
4.Mysql、Redis数据库连接的释放统一注册在函数事件管理器,由程序退出时统一释放。
5.容器存储变量修改为sync.map,避免了并发情况下发生bug。
V 1.0.00 2020-04-14
1.基于gin框架的web项目骨架.
2.开发单体应用基本的功能模块全部已经封装完毕.