大家好呀!自上次发布到现在,从初秋到深冬,我们也完全冇闲着哟,我们这次带来了爱心满满的GoFrame v1.15版本。此外,还有两件事:
GoFrame被OSC开源中国评选为了2020年度TOP30的开源项目:www.oschina.net/question/29… ,感谢大家的认可与支持!同时GoFrame也是Gitee GVP
最有价值项目。GoFrame官网船新改版,里挤需体验三番钟,里造会干我一样,爱上介款框架:goframe.org 。感谢Atlassian的赞助,提供的全产品线正版授权码!
经过多年的潜心修炼和稳定发展,GoFrame已经逐步成长为了一款企业级的Golang基础开发框架,她提供了项目开发规范、开发工具链、完善的基础模块、丰富的开发文档、高代码质量以及活跃的社区。为保证框架质量,我们为各个组件进行了大量的单元测试以保证逻辑的正确(2534例测试单元,9097项测试断言),同时维护了高质量的文档,至今,已有很多的大型/中小型互联网公司在生产环境使用GoFrame。
开源不易,有你们的理解和支持,幸福满满!感谢所有参与项目开发的小伙伴们,爱你们!GF, YES!
GoFrame
GF(Go Frame)是一款模块化、高性能、企业级的Go基础开发框架。实现了比较完善的基础设施建设以及开发工具链,提供了常用的基础开发模块,如:缓存、日志、队列、数组、集合、容器、定时器、命令行、内存锁、配置管理、资源管理、数据校验、定时任务、数据库ORM、TCP/UDP组件、进程管理/通信等等。并提供了Web服务开发的系列核心组件,如:Router、Cookie、Session、Middleware、服务注册、模板引擎等等,支持热重启、热更新、域名绑定、TLS/HTTPS、Rewrite等特性。
如果您初识
Go语言,您可以将GoFrame类似于PHP中的Laravel,Java中的SpringBoot或者Python中的Django。
特点
- 模块化、松耦合设计;
- 模块丰富、开箱即用;
- 简便易用、易于维护;
- 高代码质量、高单元测试覆盖率;
- 社区活跃,大牛谦逊低调脾气好;
- 详尽的开发文档及示例;
- 完善的本地中文化支持;
- 设计为团队及企业使用;
Change Logs
ghttp- 改建
HTTPClient的GET请求相关方法,当传递参数时不再作为Body参数提交,而是自动构造为QueryString提交。以保证与其他服务端的兼容能力。 - 请求对象
Request增加默认值设置特性: - 增加
Request.SetCtx方法,用于自定义上下文变量,常用于中间件/拦截器中: - 模板解析中增加
Request变量,用于获得客户端提交的请求参数,无论是QueryString/Form类型参数: Cookie功能改进,如何设置与Session有效期保持一致的Cookie,请参考:Cookie#Cookie会话过期- 分组路由注册增加
ALLMap方法,用于批量注册路由:分组路由#批量注册 - 新增
CRSF插件介绍文档: - 其他一些功能及细节改进。
- 改建
gdb- 增加
Ctx方法,用于异步IO控制或传递自定义的上下文信息,特别是链路跟踪信息: - 增加
Raw类型,用于原始SQL语句嵌入,该语句将会直接提交到底层数据库驱动,不会做任何处理:写入保存#RawSQL语句嵌入、更新删除#RawSQL语句嵌入 - 改进
Fields/Fields/Data方法,增加对输入map/struct参数与数据表字段的自动映射检测、过滤: - 增加
InsertedAt/UpdatedAt/DeletedAt字段名称的配置,增加TimeMaintainDisabled配置可关闭时间填充及软删除特性: - 增加
Counter更新特性,用于字段的增加/减少操作:更新删除#Counter更新特性 - 改进
ORM时区处理,详情请参考章节: - 其他关于性能和易用性的细节改进。
- 一些细节问题改进。
- 完善单元测试。
- 增加
gerror- 增加
Newf/NewSkipf方法创建错误对象: - 增加对错误码特性的支持:
- 完善单元测试。
- 增加
gvalid- 增加
phone-loose宽松手机号校验规则,只要满足13/14/15/16/17/18/19开头的11位数字都可以通过验证。 - 返回校验错误实现了
gerror的Current() error接口,因此可以使用gerror.Current方法来获取当前第一条校验错误: - 其他细节改进。
- 单元测试完善。
- 增加
gvar- 增加
IsNil/IsEmpty方法,判断数据是否为nil/空。 - 增加
IsInt/IsUint/IsFloat/IsSlice/IsMap/IsStruct常用类型判断方法。 - 标注废弃
StructDeep/StructDeep方法,直接使用Struct/Structs即可。 - 完善单元测试。
- 增加
ghtml- 增加
SpecialCharsMapOrStruct方法,用于自动转换map/struct键值/属性中的HTML代码,防止XSS。
- 增加
gjson- 标记废弃
To*转换方法,例如:ToStruct替换为Struct方法。 - 一些细节问题改进。
- 单元测试完善。
- 标记废弃
internal- 改进并完善
internal/empty包的空值判断。 - 由于性能问题 github.com/gogf/gf/iss… ,临时删除了
internal/json包中对第三方包 github.com/json-iterat… 的依赖,还原为标准库encoding/json。 - 改进
internal/structs包,由于该包在struct转换特性中使用比较频繁,因此去掉第三方包 github.com/gqcn/struct… 的依赖,简化了反射处理逻辑,提高了性能以及易用性,提高了长期维护性。 internal/utils包增加RemoveSymbols方法,用于删除字符串中的特殊字母。改进EqualFoldWithoutChars方法,去掉对字符串中字符串的正则过滤功能,极大提高了方法性能。不要小看这两个小函数,性能的点滴改进能提高框架中其他涉及到复杂类型转换模块的性能。internal包虽然不直接对外暴露方法,但是却影响着框架中的一些核心组件性能。
- 改进并完善
gcfg- 改进单例名称的配置对象获取,增加自动检测文件类型功能:配置管理-单例对象#自动检索特性
- 其他一些细节改进。
gcmd- 改进默认参数解析获取方式:
- 增加
GetWithEnv方法,当命令行中不存在指定参数时,同时从环境变量中获取:
genv- 增加
SetMap方法,用于批量设置环境变量。 - 增加
GetWithCmd方法,当环境变量中不存在指定参数时,同时从命令行参数中获取:
- 增加
gfile- 标记废弃
ReadByteLines方法,新增ReadLinesBytes方法。 - 调整
ReadLines/ReadLinesBytes方法回调函数定义,增加error返回。
- 标记废弃
glog- 改进滚动更新功能。
- 其他一些细节改进。
gsession- 增加
SetMap方法,用于批量设置键值对数据。
- 增加
gtimer- 常量名称改进,统一采用大驼峰方式。
gview- 增加内置模板函数
map,用于将参数转换为map[string]interface{}类型。 - 增加内置模板函数
maps,用于将参数转换为[]map[string]interface{}类型。 - 增加内置模板函数
json,用于将参数转换为JSON字符串类型。 - 文档更新:
- 其他一些细节改进。
- 增加内置模板函数
gconv- 性能改进。
- 功能改进(细节改进有点多,实在不想写得太详细)。
- 代码更加健壮。
- 单元测试完善。
gutil- 增加
Keys方法,用于获取map/struct的键名/属性名称,构造成数组返回。 - 增加
Values方法,用于获取map/struct的键值/属性值,构造成数组返回。 - 增加
MapToSlice方法,例如:{"K1": "v1", "K2": "v2"} => ["K1", "v1", "K2", "v2"] - 增加
StructToSlice方法,例如:{"K1": "v1", "K2": "v2"} => ["K1", "v1", "K2", "v2"] - 增加
SliceToMap方法,例如:["K1", "v1", "K2", "v2"] => {"K1": "v1", "K2": "v2"} - 单元测试完善。
- 其他细节改进。
- 增加
Bug Fix
- 修复
garray/gmap/gtree的Clone方法并发安全判断问题。 - 修复当设置了过期方法,但
gpool在元素项过期时没有自动调用过期方法处理的问题。 - 修复
gfile.ReadLInes/ReadLineBytes在数据量大时的读取重复问题。 - 其他一些错误修复。
本文转载自: 掘金