各位gfer久等了,较上一次发布时间过去已有两个多月了,这段时间GF也在不断地迭代改进,细节比较多,拟了个大概,以下是release log。
另外,GoFrame也参加了2019最受欢迎中国开源软件评选投票,明天就结束了,欢迎为GF投票啊:https://www.oschina.net/project/top_cn_2019 网页可以投一票,微信也可以投一票。
Web Server新特性:Session增加内置的多种Storage实现:- 增加日志组件单例对象,并优化配置管理:
- 常用的
container容器增加JSON数据格式的Marshal/UnMarshal接口实现: - 新增
guuid模块,用于通用的UUID生成:https://goframe.org/util/guuid/index
ghttp- 改进请求流程处理性能;
Server增加对Logger日志对象的配置;Server开放了GetRouterMap方法,用于获得当前服务的路由列表信息,使得开发者可以更方便地实现自定义权限管理;Server配置管理优化;Client客户端对象进行了大量的改进工作;Client客户端对象增加多文件上传功能;Request对象增加GetError方法,用于获取当前处理错误;Request对象增加独立的视图对象及视图变量绑定功能,使得每个请求可以独立视图管理,也可以通过中间件切换请求对象的视图对象。默认情况下该功能关闭,视图解析时使用的是Server对象的视图对象;- 改建
Response对象的CORS功能; - 增加
Response.WriteTplDefault方法,用于解析并返回默认的模板内容; - 增加更多的单元测试用例;
- 其他改进;
gipv4/gipv6- 一些改进工作;
gtcp/gudp- 一些改进工作;
gdb- 大量细节改进工作;
- 去掉查询数据为空时的
sql.ErrNoRows错误返回,保留Struct/Structs/Scan方法在操作数据为空的该错误返回; - 调试模式开启时,输出的SQL语句改进为完整的带参数的SQL,仅作参考;
Where方法增加对gmap数据类型支持,包括顺序性的ListMap/TreeMap等等;- 查询缓存方法
Cache的缓存时间参数类型修改为time.Duration; - 修改
Record/Result的数据类型转换方法名称,原有的转换方法标记为deprecated; Record/Result查询结果类型增加IsEmpty方法,用于判断结果集是否为空;Record类型增加GMap方法,用于将查询记录转换为gmap类型;- 增加
Option/OptionOmitEmpty方法,用于输入参数过滤,包括Data参数及Where参数:https://goframe.org/database/gdb/empty - 增加字段排除方法
FieldsEx:https://goframe.org/database/gdb/senior - 增加日志功能特性:https://goframe.org/database/gdb/senior
- 改进数据库配置管理:https://goframe.org/database/gdb/config
- 增加大量单元测试;
gredis- 返回数据类型转换改进:gogf#415
- 完善单元测试;
- 其他改进;
gcache- 需要注意了:缓存的有效时间参数从
interface{}类型调整为了time.Duration类型,因此不再兼容之前的int参数类型,以保证更好的性能;
- 需要注意了:缓存的有效时间参数从
gfcache- 由于
gcache组件的缓存时间参数类型的变更,因此该组件的时间参数也变更为了time.Duration类型;
- 由于
gcfg- 增加
Available方法,用以判断配置是否有效;
- 增加
gfile- 增加
Chdir方法,用于工作目录切换;
- 增加
gtime- 增加
JSON数据格式的Marshal/UnMarshal接口实现;
- 增加
gmap- 增加
MapStrAny方法,用于常见map类型的转换; - 增加
MapCopy方法,用于底层map数据复制; - 增加
FilterEmpty方法,用于map空值过滤; - 增加
Pop/Pops方法,用于随机返回map中的数据项(并删除); - 增加
Replace方法,用于给定的map数据覆盖底层map数据项; - 完善单元测试;
- 其他改进;
- 增加
garray- 增加
Interfaces转换方法,返回[]interface{}类型; - 对排序数组增加
SetComparator方法用户自定义修改比较器; - 完善单元测试;
- 其他改进;
- 增加
glist- 增加
NewFrom方法,基于给定的[]interface{}变量创建链表; - 增加
Join方法,用于将链表项使用给定字符串连接为字符串返回; - 完善单元测试;
- 其他改进;
- 增加
gset- 增加
AddIfNotExistFunc/AddIfNotExistFuncLock方法; - 完善单元测试;
- 其他改进;
- 增加
gtree- 增加
Replace方法,用于更新现有树的数据项; - 其他改进;
- 增加
gtype- 一些细节改进工作,不一一列出;
- 完善基准测试、单元测试;
gvar- 增加
Ints/Uints类型转换方法; - 其他改进;
- 增加
gmd5- 小细节改进;
gsha1- 小细节改进;
gstr- 改进
SplitAndTrim方法,将SplitAndTrimSpace标记为deprecated; - 增加
TrimStr方法; - 完善单元测试;
- 其他改进;
- 改进
gdebug- 增加
CallerFileLineShort/FuncPath/FuncName方法; - 其他改进;
- 增加
gbase64- 增加
EncodeToString/EncodeFile/EncodeFileToString/DecodeToString方法; - 完善单元测试;
- 增加
gjson- 完善单元测试;
g/gins- https://goframe.org/frame/g/index
- 增加
CreateVar方法; - 完善单元测试;
- 其他改进;
gconv- 改进优化部分类型转换方法性能;
- 增加
Uints/SliceUint类型转换方法; - 增加
UnsafeStrToBytes/UnsafeBytesToStr高性能的类型转换方法; - 增加对
MapStrAny接口方法的支持,用于常见map类型的转换; - 其他改进;
gvalid- 改进对中国身份证号的识别校验功能;
- 增加
luhn银行卡号的校验功能;
grand- 一些性能改进工作;
- 解决
WebSocket关闭时的hijacked报错问题:gogf#381 - 解决静态文件服务时大文件的内存占用问题;
- 修复前置
Nginx后默认情况下的Cookie域名设置问题; - 修复
gconv.Struct在属性为[]struct并且输入属性参数为空时的转换失败问题:gogf#405 - 其他一些修复;
该版本实际为v2.0的大版本发布,为避免go module机制严格要求v2版本以上需要修改import并加上v2后缀,因此使用了v1.9版本进行发布。
- 新增
gf命令行开发辅助工具:https://goframe.org/toolchain/cli - 新增
gres资源管理器模块:https://goframe.org/os/gres/index - 重构
Session功能,新增gsession模块,WebServer默认使用文件存储Session:https://goframe.org/net/ghttp/session WebServer新增中间件特性,并保留原有的HOOK设计,两者都可实现请求拦截、预处理等等特性:https://goframe.org/net/ghttp/router/middleware- 新增
gi18n国际化管理模块:https://goframe.org/i18n/gi18n/index - 新增
gini模块:https://goframe.org/encoding/gini/index WebServer新增更便捷的层级路由注册方式:https://goframe.org/net/ghttp/group/levelgcmd命令行参数解析模块重构,增加Parser解析对象:https://goframe.org/os/gcmd/index- 新增
gdebug模块,用于堆栈信息获取/打印:https://goframe.org/debug/gdebug/index
- 去掉
1.x版本中已经被标记为deprecated的方法; - 调整
container分类的容器模块,将默认并发安全参数调整为默认非并发安全; - 目录调整:
- 去掉
third目录,统一使用go module管理包依赖; - 将原有
g目录中的模块移出到框架主目录,原有的g模块移动到frame/g目录; - 将原有
geg示例代码目录名称修改为.example;
- 去掉
ghttp- 改进
Request参数解析方式:https://goframe.org/net/ghttp/request - 改进跨域请求功能,新增
Origin设置及校验功能:https://goframe.org/net/ghttp/cors Cookie及Session的TTL配置数据类型修改为time.Duration;- 新增允许同时通过
Header/Cookie传递SessionId; - 新增
ConfigFromMap/SetConfigWithMap方法,支持通过map参数设置WebServer; - 改进默认的
CORS配置,增加对常见Header参数的默认支持; - 新增
IsExitError方法,用于开发者自定义处理recover错误处理时,过滤框架本身自定义的非异常错误; - 新增
SetSessionStorage配置方法,用于开发者自定义Session存储; ghttp.Request新增更多的参数获取方法;
- 改进
gdb- 增加对SQL中部分字段的自动转义(
Quote)功能; - 增加对方法操作以及链式操作中的
slice参数的支持; - 增加
SetLogger方法用于开发者自定义数据库的日志打印; - 增加
Master/Slave方法,开发者可自主选择数据库操作执行的主从节点; - 增加对
mssql/pgsql/oracle的单元测试; - 在
debug模式支持完整带参数整合的SQL语句调试打印; - 增加了更多的功能方法;
- 增加对SQL中部分字段的自动转义(
glog- 新增
Default方法用于获取默认的Logger对象; - 新增
StackWithFilter方法用于自定义堆栈打印过滤; - 增加了更多的功能方法;
- 新增
gfile- 部分方法名称调整:
Get/PutBinContents修改为Get/PutBytes; - 增加
ScanDirFile方法,用于仅检索文件目录,支持递归检索; - 增加了更多的功能方法;
- 部分方法名称调整:
gview- 新增
SetI18n方法用于设置视图对象自定义的gi18n国际化对象; - 新增对
gres资源管理器的内置支持;
- 新增
gcompress- 增加
zip算法的文件/目录的压缩/解压方法; - 文件/目录压缩参数支持多路径;
- 增加
gconv- 改进对
[]byte数据类型参数的支持; - 新增
Unsafe转换方法,开发者可在特定场景下使用,提高转换效率; - 新增
MapDeep/StructDeep/StructsDeep方法,支持递归struct转换;
- 改进对
gjson/gparser- 改进类型自动识别功能;
- 新增
LoadJson/LoadXml/LoadToml/LoadYaml/LoadIni方法用于自定义的数据类型内容加载; - 增加了更多的功能方法;
gerror- 改进错误堆栈获取逻辑;
- 增加了更多的功能方法;
gmap/garray/gset/glist/gvar- 改进并发安全基准测试脚本;
- 修改
garray.StringArray为garray.StrArray; - 增加了更多的功能方法;
gdes- 规范化修改方法名称;
gstr- 增加
Camel/Snake相关命名转换方法; - 增加了更多的功能方法;
- 增加
genv- 增加了更多的功能方法;
- 修复
gvalid校验struct时的tag自定义错误失效的问题; - 修复
gcfg配置管理模块在特定情况下的内容类型自动识别失败问题; - 修复
gqueue在用户主动关闭队列时的并发安全问题; - 修复
session在开发者设置的TTL过大时的整型变量溢出问题;