跳到主要内容
版本:2.7.x(Latest)

大家好啊!久等啦!

由于自从上次版本的发布以来,越来越多小伙伴加入了 GF 的大家庭,并提供了许多不错的建议和反馈,这次版本对其中大部分反馈进行了处理,包括大部分的改进建议和部分新特性,因此这次的版本发布时隔了两个多月。 GF 非常注重代码质量以及可持续维护性,这次版本也进一步对框架大部分模块的示例、注释和单元测试用例进行了完善,目前单元测试用例数量约为 1991 例,代码覆盖率为 71%,覆盖了所有模块的绝大部分主要功能。

GF 框架提供了比较常用、高质量的基础开发模块,轻量级、模块化、高性能,推荐大家阅读框架源码了解更多细节。本次发布有个别的不兼容升级,往往批量替换即可,以下 change log 比较完善,建议升级前仔细阅读。

本次发布即意味下一版本开发计划的开启,欢迎更多小伙伴参与开源贡献: https://github.com/gogf/gf/projects/8

感谢大家支持!Enjoy your GF

GoFrame

GF(Go Frame) 是一款模块化、高性能、生产级的Go基础开发框架。实现了比较完善的基础设施建设以及开发工具链,提供了常用的基础开发模块,如:缓存、日志、队列、数组、集合、容器、定时器、命令行、内存锁、对象池、配置管理、资源管理、数据校验、数据编码、定时任务、数据库ORM、TCP/UDP组件、进程管理/通信等等。并提供了Web服务开发的系列核心组件,如:Router、Cookie、Session、Middleware、服务注册、模板引擎等等,支持热重启、热更新、域名绑定、TLS/HTTPS、Rewrite等特性。

特点

  • 模块化、松耦合设计;
  • 模块丰富,开箱即用;
  • 简便易用,易于维护;
  • 社区活跃,大牛谦逊低调脾气好;
  • 高代码质量、高单元测试覆盖率;
  • 详尽的开发文档及示例;
  • 完善的本地中文化支持;
  • 更适合企业及团队使用;

地址

Change Log

GF v1.12 版本开始,框架要求的最低 Golang 运行版本为 v1.13,由于 Golang 新版本都是向后兼容的,因此推荐大家更新使用 Golang 新版本: https://golang.google.cn/dl/

本次版本也新增了 Swagger 的工具及插件支持,另行独立发布。

tool chain

  1. gen model 命令新增对 pgsql/mssql/sqlite/oracle 的模型生成支持。
  2. gen model 命令生成模型新增公开包变量 Columns 用于获得表的字段名称。

net

  1. ghttp

database

  1. gdb

  2. gredis

    • 增加/修改默认的数据库连接池参数: MaxIdle=10, IdleTimeout=10s, MaxConnLifetime=30s, Wait=true
    • 完善单元测试。

container

  1. 所有容器对象新增 UnmarshalValue(interface{}) error 接口方法实现,用于 gconv 转换时根据任意类型变量创建/设置对象内容, GF 框架的所有容器对象均实现了该接口。

  2. garray

    • 新增 RemoveValue 方法,用于根据数值检索并删除元素项。
    • 新增 FilterNil 方法,用于遍历并删除数组中的 nil 元素项。
    • 新增 FilterEmpty 方法,用于遍历并删除数组中的空值元素项,空值包括: 0, nil, false, "", len(slice/map/chan) == 0
    • 改进 Set/Fill/InsertBefore/InsertAfter 方法严谨性,将原有的链式操作返回值对象修改为 error 返回值。
    • 改进 Get/Remove/PopRand/PopLeft/PopRight/Rand 方法严谨性,增加 foundbool 返回值,标识当前方法是否有数据返回,当空数组或者操作越界时 found 返回值为 false
    • 改变 Rands 方法原有逻辑,保证按照给定大小返回随机数组。
    • 完善单元测试。
  3. gpool

    • 调整缓存池过期时间参数类型,旧版本为 int 类型表示毫秒,新版本为 time.Duration 类型使得时间控制更灵活。
    • 内部代码优化,性能改进。
    • 完善单元测试。
    • 完善注释。

os

  1. glog

  2. gres

    1. 改进资源内容编码设计,采用新的压缩算法,减少资源文件大小,例如原本 15MB 的网站静态资源文件( css/js/html 等),资源文件打包后约为 4MB 左右: https://goframe.org/os/gres/index
    2. 注意:该改进与旧版本无法兼容,需要重新打包原有的资源文件。
    3. 完善单元测试。
  3. gcfg

    • 去掉配置对象属性的原子并发安全控制,改为普通变量类型。由于配置管理是最常用模块之一,因此确保高效的设计及方法实现。
    • 单例对象做较大调整:为方便多文件场景下的配置文件调用,简便使用并提高开发效率,因此当给定的单例名称对应的 toml 配置文件在配置目录中存在时,将自动设置该单例对象的默认配置文件为该文件。例如: g.Cfg("redis") 获取到的单例对象将会默认去检索并设置默认的配置文件为 redis.toml,当该文件不存在时,则使用默认的配置文件( config.toml): https://goframe.org/net/ghttp/config
    • 完善单元测试。
  4. gview

  5. gfile

    • 改进 SelfPath 获取当前执行文件路径方法,提高执行效率。
    • 改进 Join 文件路径连接方法,防止多余的路径连接符号。
    • 改建 GetContents 文件内容获取方法执行效率,降低内存占用。
    • 新增 StrToSize 方法,用于将大小字符串转换为字节数字,大小字符串例如 10m, 5KB, 1.25Gib 等。
    • 新增 ReadLines/ReadByteLines 方法,用于按行读取指定文件内容,并给定读取回调函数。
    • 完善单元测试。
  6. gtime

    • 改进 gtime.Time 对象实现,统一字符串打印时间格式为 Y-m-d H:i:s,如: 2020-01-01 12:00:00
  7. gcmd

    • 命令行解析方法增加 strict 参数,用于设置当前解析是否严格解析,严格解析下如果给定了非法的选项,将会停止解析并返回错误。默认情况下为非严格解析。
  8. genv

    • 改进 Remove 删除环境变量键值对方法,增加对多个键值对环境变量的删除。
  9. gfpool

    • 改进代码实现,提高效率。
    • 完善单元测试。
  10. gfsnotify

    • 改进包初始化方法,当系统原因引起默认 Watcher 对象创建失败时,直接 panic
  11. gproc

    • 改进 SearchBinaryPath 方法。
    • 改进 Process.Kill 方法在 windows*niux 平台下不同表现的处理。

encoding

  1. gjson

frame

  1. g
    • 新增 IsNil 方法,用于判断当前给定的变量是否为 nil,该方法有可能会使用到反射来实现判断。
    • 新增 IsEmpty 方法,用于判断当前给定的变量是否为 ,该方法优先使用断言判断但有可能会使用到反射来实现判断。空值包括: 0, nil, false, "", len(slice/map/chan) == 0
    • 标记废弃 SetServerGraceful 方法,转而统一交给 Server 的配置来管理。
  2. gins
    • 改进代码结构,方便维护。
    • 改进、完善单元测试。
  3. gmvc
    • 新增 M 类型,为 *gdb.Model 的别名简称,用于工具链自动生成模型中的 M 属性。

text

  1. gstr
    • 新增 HasPrefix/HasSuffix 方法。
    • 新增 OctStr 方法,用于将八进制字符串转换为其对应的 unicode 字符串,例如转换为中文。常用于 gRPC 底层通信编码中。
    • 完善单元测试。

debug

  1. gdebug
    • 改进代码结构,方便维护。
    • 新增 TestDataPath 方法,用于当前包单元测试中获得当前包中 testdata 目录的绝对路径。

util

  1. gconv

    • 改进 String 字符串转换方法,增加对 time.Time/*time.Time/gtime.Time 类型的内置支持。
    • 改进 Map/Struct 转换方法,增加对一些特殊场景的细节处理。经过大规模的使用,大量的反馈改进,不断完善了细节。
    • 改进 Struct 转换方法,增加对 UnmarshalValue(interface{}) error 接口的支持。
    • 完善单元测试。
  2. grand

    • 注意:不兼容调整,原有的 Str 方法更名为 S 方法,用以获取指定长度的随机字符串、数字,并增加 symbol 参数,指定是否可以随机返回特殊可见字符。
    • 新增 Str 方法,用于从指定的字符串字符中随机获取指定长度的字符串。该方法同时支持 unicode 字符串,例如:中文: https://goframe.org/util/grand/index
    • 新增 Symbols 方法,用于随机返回指定场孤独的特殊可见字符: https://goframe.org/util/grand/index
    • 完善单元测试。
  3. gvalid

    • 长度校验规则增加对 unicode 字符串的支持,例如:中文。

Bug Fix

  1. 修复 Server 的视图对象配置失效问题。
  2. 修复 Server 中间件在中间件 panic 情况下,忽略 Middleware.Next 方法控制,导致鉴权中间件失效的问题。
  3. 修复 gudp.Server 在请求包大小超过 64bytes 时的断包问题,并调整默认缓冲区大小为 1024byte,开发者可自定义缓冲区大小。
  4. 修复 gfile.MTimeMillisecond 方法返回错误的文件修改毫秒时间戳。
  5. 修复 gconv.Int64 对负数转换的支持。
  6. 其他一些修复。
  7. 详见: https://github.com/gogf/gf/issues?q=label%3Abug