大家好呀!自上次发布到现在,从初秋到深冬,我们也完全冇闲着哟,我们这次带来了爱心满满的GoFrame v1.15
版本。此外,还有两件事:
GoFrame
被OSC
开源中国评选为了2020
年度TOP30
的开源项目:https://www.oschina.net/question/2918182_2320114 ,感谢大家的认可与支持!同时GoFrame
也是Gitee GVP
最有价值项目。GoFrame
官网船新改版,里挤需体验三番钟,里造会干我一样,爱上介款框架:https://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
。
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
包的空值判断。internal/json
包中对第三方包 github.com/json-iterator/go 的依赖,还原为标准库encoding/json
。internal/structs
包,由于该包在struct
转换特性中使用比较频繁,因此去掉第三方包 github.com/gqcn/structs 的依赖,简化了反射处理逻辑,提高了性能以及易用性,提高了长期维护性。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"}
* 单元测试完善。
* 其他细节改进。garray/gmap/gtree
的Clone
方法并发安全判断问题。gpool
在元素项过期时没有自动调用过期方法处理的问题。gfile.ReadLInes/ReadLineBytes
在数据量大时的读取重复问题。这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.