哈罗,各位gfer久等啦,时隔两个月,新版本又来咯!!
GoFrame
GF(Go Frame)是一款模块化、高性能、生产级的Go基础开发框架。实现了比较完善的基础设施建设以及开发工具链,提供了常用的基础开发模块,如:缓存、日志、队列、数组、集合、容器、定时器、命令行、内存锁、对象池、配置管理、资源管理、数据校验、数据编码、定时任务、数据库ORM、TCP/UDP组件、进程管理/通信等等。并提供了Web服务开发的系列核心组件,如:Router、Cookie、Session、Middleware、服务注册、模板引擎等等,支持热重启、热更新、域名绑定、TLS/HTTPS、Rewrite等特性。
特点
- 模块化、松耦合设计;
- 模块丰富、开箱即用;
- 简便易用、易于维护;
- 高代码质量、高单元测试覆盖率;
- 社区活跃,大牛谦逊低调脾气好;
- 详尽的开发文档及示例;
- 完善的本地中文化支持;
- 设计为团队及企业使用;
发展
GoFrame开始得比较早,2011年始于北京一个智能物联网平台项目,那时还没有这么多物联网的现行标准,Go的标准库以及生态也未如此丰富。2017年的时候GF才开始发布测试版,2018年1024程序员节日的时候才发布v1.0正式版,为Go生态发展添砖加瓦。开源以来快速迭代、发展成长,广受开发者和企业的青睐,也有许多的开发者加入了贡献行列。GF原本是为开发团队设计的,因此她的开发效率和可维护性做得非常好,有着很高的代码质量以及丰富的单元测试和示例,并且GF是目前中文化文档做的最好的Golang开发框架。
Change Log
- 应多数开发者的要求,框架要求的最低
Golang运行版本降级为了v1.11。
- 新增
GoFrame视频教程地址:
- 将不常用的
guuid模块迁移到 github.com/gogf/guuid 作为社区模块维护,保持gf主仓库的轻量级。
- 新增
guid模块,用于高效轻量级的唯一字符串生成:https://goframe.org/util/guid/index
tool chain
- 工具链更新:https://goframe.org/toolchain/cli
- 新增
gf env命令,更优雅地查看当前Golang环境变量信息。
- 新增
gf mod path命令,用于将当前go modules包拷贝到GOPATH中,以便使用原始的GOPATH方式开发项目。
- 对现有
cli命令进行了一些改进,提高使用体验;预编译二进制版本在部分平台下提供了upx压缩,使得下载的文件更小。
container
garray
gchan
- 由于该封装包实际意义不是很大,因此从主框架中删除;
glist
gmap
gset
gtree
gvar
database
gdb
gredis
net
-
ghttp
-
gipv4
- 增加
GetIpArray方法,用于获取当前主机的所有IPv4地址;
- 增加
GetMacArray及GetMac方法,用于获取当前主机的MAC地址信息;
- 修改
IntranetIP方法名称为GetIntranetIp,修改IntranetIPArray方法名称为GetIntranetIpArray;
encoding
gjson
- 新增
GetMaps获取JSON内部节点变量方法;
- 改进
NewWithTag方法对map/struct的处理;
- 完善单元测试,代码覆盖率
77%;
gyaml
- 升级依赖的第三方
yaml解析包,解决了map[interface{}]interface{}转换问题;
error
gerror
- 新增
NewfSkip方法,用于创建skip指定堆栈的错误对象;
- 放开框架所有的堆栈链路打印,展示错误时真实的链路调用详情;
os
-
gcache
- 增加
GetVar方法,用于获得可以便捷转换为其他数据类型的"泛型"变量;
- 标记
Removes方法废弃,改进Remove方法参数为不定参数,统一使用Remove方法删除单个/多个键值对;
- 完善单元测试,代码覆盖率
96%;
-
genv
- 增加
GetVar方法,用于获得可以便捷转换为其他数据类型的"泛型"变量;
-
gfile
- 改进
CopyDir/CopyFile复制目录/文件方法;
- 新增
ScanDirFunc方法,用于支持自定义处理回调的目录检索;
- 完善单元测试,代码覆盖率
64%;
-
glog
-
gres
- 改进打包特性,增强生成二进制文件及Go文件的压缩比,比旧版本增加
20%压缩率,使得编译生成的二进制文件体积更小;
- 代码结构改进,提高执行效率及可持久维护性;
-
gsession
- 改进
SessionId默认生成方法,采用guid.S方法生成;
- 增加
SetId及SetIdFunc方法,用于自定义SessionId及自定义的SessionId生成方法;
frame
g
- 新增
g.Table方法,用于快速创建数据库模型操作对象;
i18n
gi18n
- 新增
GetContent方法,用于获取指定i18n关键字为转译内容;
- 改进代码细节,提高性能和持久可维护性;
- 完善单元测试,代码覆盖率
74%;
test
gtest
- 增加
AssertNQ断言方法,用于强类型的不相等判断;
text
gstr
- 增加
SubStrRune方法,用于支持unicode的字符串截取;
- 增加
StrLimitRune方法,用于支持unicode的字符串截断隐藏;
- 增加
LenRune方法,用于替换RuneLen方法,统一方法命名风格;
- 增加
PosRune/PosIRune/PosRRune/PosRIRune方法,用于支持unicode的字符串左右位置查找;
- 增加
CompareVersionGo方法,用于Golang风格的版本号大小比较;
- 完善单元测试,代码覆盖率
75%;
util
-
gconv
- 改进
Convert转换方法,支持常见map类型的转换;
- 改进类型转换过程中异常错误的捕获,通过
error返回;
- 其他一些细节改进;
- 完善单元测试,代码覆盖率
63%;
-
grand
- 增加
B方法,用于获得随机的二进制数据;
- 改进代码底层实现,部分接口性能提高
50%;
- 完善单元测试,代码覆盖率
74%;
-
guid
-
gutil
- 增加
MapContains方法,用于判断map中是否包含指定键名;
- 增加
MapDelete方法,用于删除map中指定的键名,可以为多个键名;
- 增加
MapMerge方法,用于合并两个map;
- 增加
MapMergeCopy方法,用于拷贝多个map;
- 增加
MapContainsPossibleKey方法,用于查找指定键名,忽略大小写及字符'-'/'_'/'.'/' ';
-
gvalid
Bug Fix
- 修复
gcompress的多文件zip压缩问题;
- 修复
ghttp.Client获取返回的过期Cookie的问题;
- 修复
gres.File对于http.File接口的实现细节;
- 修复
garray.Pop*方法的边界问题;
- 修复
gres中Readdir方法参数为0时报错的问题;
- 其他一些修复:https://github.com/gogf/gf/issues?q=is%3Aissue+label%3Abug