GoFrame v1.15发布,企业级Go开发框架

johng · · 1178 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

大家好呀!自上次发布到现在,从初秋到深冬,我们也完全冇闲着哟,我们这次带来了爱心满满的`GoFrame v1.15`版本。此外,还有两件事: * `GoFrame`被`OSC`开源中国评选为了`2020`年度`TOP30`的开源项目:[https://www.oschina.net/question/2918182\_2320114](https://www.oschina.net/question/2918182_2320114) ,感谢大家的认可与支持!同时`GoFrame`也是`Gitee GVP` [最有价值项目](https://gitee.com/johng/gf)。 * `GoFrame`官网船新改版,里挤需体验三番钟,里造会干我一样,爱上介款框架:[https://goframe.org](https://goframe.org) 。感谢[Atlassian](https://www.atlassian.com/)的赞助,提供的全产品线正版授权码! 经过多年的潜心修炼和稳定发展,`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 1. `ghttp` * 改建`HTTPClient`的`GET`请求相关方法,当传递参数时不再作为`Body`参数提交,而是自动构造为`QueryString`提交。以保证与其他服务端的兼容能力。 * 请求对象`Request`增加默认值设置特性: * 增加`Request.SetCtx`方法,用于自定义上下文变量,常用于中间件/拦截器中: * 模板解析中增加`Request`变量,用于获得客户端提交的请求参数,无论是`QueryString/Form`类型参数: * `Cookie`功能改进,如何设置与`Session`有效期保持一致的`Cookie`,请参考:[Cookie#Cookie会话过期](https://itician.org/display/gf/Cookie#Cookie-Cookie%E4%BC%9A%E8%AF%9D%E8%BF%87%E6%9C%9F) * 分组路由注册增加`ALLMap`方法,用于批量注册路由:[分组路由#批量注册](https://itician.org/pages/viewpage.action?pageId=1114517#id-%E5%88%86%E7%BB%84%E8%B7%AF%E7%94%B1-%E6%89%B9%E9%87%8F%E6%B3%A8%E5%86%8C) * 新增`CRSF`插件介绍文档: * 其他一些功能及细节改进。 2. `gdb` * 增加`Ctx`方法,用于异步`IO`控制或传递自定义的上下文信息,特别是链路跟踪信息: * 增加`Raw`类型,用于原始`SQL`语句嵌入,该语句将会直接提交到底层数据库驱动,不会做任何处理:[写入保存#RawSQL语句嵌入](https://itician.org/pages/viewpage.action?pageId=1114344#id-%E5%86%99%E5%85%A5%E4%BF%9D%E5%AD%98-RawSQL%E8%AF%AD%E5%8F%A5%E5%B5%8C%E5%85%A5)、[更新删除#RawSQL语句嵌入](https://itician.org/pages/viewpage.action?pageId=1114238#id-%E6%9B%B4%E6%96%B0%E5%88%A0%E9%99%A4-RawSQL%E8%AF%AD%E5%8F%A5%E5%B5%8C%E5%85%A5) * 改进`Fields/Fields/Data`方法,增加对输入`map/struct`参数与数据表字段的自动映射检测、过滤: * 增加`InsertedAt/UpdatedAt/DeletedAt`字段名称的配置,增加`TimeMaintainDisabled`配置可关闭时间填充及软删除特性: * 增加`Counter`更新特性,用于字段的增加/减少操作:[更新删除#Counter更新特性](https://itician.org/pages/viewpage.action?pageId=1114238#id-%E6%9B%B4%E6%96%B0%E5%88%A0%E9%99%A4-Counter%E6%9B%B4%E6%96%B0%E7%89%B9%E6%80%A7) * 改进`ORM`时区处理,详情请参考章节: * 其他关于性能和易用性的细节改进。 * 一些细节问题改进。 * 完善单元测试。 3. `gerror` 1. 增加`Newf/NewSkipf`方法创建错误对象: 2. 增加对错误码特性的支持: 3. 完善单元测试。 4. `gvalid` * 增加`phone-loose`宽松手机号校验规则,只要满足 `13/14/15/16/17/18/19`开头的`11`位数字都可以通过验证。 * 返回校验错误实现了`gerror`的`Current() error`接口,因此可以使用`gerror.Current`方法来获取当前第一条校验错误: * 其他细节改进。 * 单元测试完善。 5. `gvar` * 增加`IsNil/IsEmpty`方法,判断数据是否为`nil/空`。 * 增加`IsInt/IsUint/IsFloat/IsSlice/IsMap/IsStruct`常用类型判断方法。 * 标注废弃`StructDeep/StructDeep`方法,直接使用`Struct/Structs`即可。 * 完善单元测试。 6. `ghtml` * 增加`SpecialCharsMapOrStruct`方法,用于自动转换`map/struct`键值/属性中的`HTML`代码,防止`XSS`。 7. `gjson` * 标记废弃`To*`转换方法,例如:`ToStruct`替换为`Struct`方法。 * 一些细节问题改进。 * 单元测试完善。 8. `internal` * 改进并完善`internal/empty`包的空值判断。 * 由于性能问题 [https://github.com/gogf/gf/issues/1004](https://github.com/gogf/gf/issues/1004) ,临时删除了`internal/json`包中对第三方包 [github.com/json-iterator/go](http://github.com/json-iterator/go) 的依赖,还原为标准库`encoding/json`。 * 改进`internal/structs`包,由于该包在`struct`转换特性中使用比较频繁,因此去掉第三方包 [github.com/gqcn/structs](http://github.com/gqcn/structs) 的依赖,简化了反射处理逻辑,提高了性能以及易用性,提高了长期维护性。 * `internal/utils`包增加`RemoveSymbols`方法,用于删除字符串中的特殊字母。改进`EqualFoldWithoutChars`方法,去掉对字符串中字符串的正则过滤功能,极大提高了方法性能。不要小看这两个小函数,性能的点滴改进能提高框架中其他涉及到复杂类型转换模块的性能。`internal`包虽然不直接对外暴露方法,但是却影响着框架中的一些核心组件性能。 9. `gcfg` * 改进单例名称的配置对象获取,增加自动检测文件类型功能:[配置管理-单例对象#自动检索特性](https://itician.org/pages/viewpage.action?pageId=1114194#id-%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86%E5%8D%95%E4%BE%8B%E5%AF%B9%E8%B1%A1-%E8%87%AA%E5%8A%A8%E6%A3%80%E7%B4%A2%E7%89%B9%E6%80%A7) * 其他一些细节改进。 10. `gcmd` * 改进默认参数解析获取方式: * 增加`GetWithEnv`方法,当命令行中不存在指定参数时,同时从环境变量中获取: 11. `genv` * 增加`SetMap`方法,用于批量设置环境变量。 * 增加`GetWithCmd`方法,当环境变量中不存在指定参数时,同时从命令行参数中获取: 12. `gfile` * 标记废弃`ReadByteLines`方法,新增`ReadLinesBytes`方法。 * 调整`ReadLines/ReadLinesBytes`方法回调函数定义,增加`error`返回。 13. `glog` * 改进滚动更新功能。 * 其他一些细节改进。 14. `gsession` * 增加`SetMap`方法,用于批量设置键值对数据。 15. `gtimer` * 常量名称改进,统一采用大驼峰方式。 16. `gview` * 增加内置模板函数`map`,用于将参数转换为`map[string]interface{}`类型。 * 增加内置模板函数`maps`,用于将参数转换为`[]map[string]interface{}`类型。 * 增加内置模板函数`json`,用于将参数转换为`JSON`字符串类型。 * 文档更新: * 其他一些细节改进。 17. `gconv` * 性能改进。 * 功能改进(细节改进有点多,实在不想写得太详细)。 * 代码更加健壮。 * 单元测试完善。 18. `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 1. 修复`garray/gmap/gtree`的`Clone`方法并发安全判断问题。 2. 修复当设置了过期方法,但`gpool`在元素项过期时没有自动调用过期方法处理的问题。 3. 修复`gfile.ReadLInes/ReadLineBytes`在数据量大时的读取重复问题。 4. 其他一些错误修复。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

1178 次点击  
加入收藏 微博
4 回复  |  直到 2020-12-31 11:18:59
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传