1 Star 0 Fork 618

cgo / gf

forked from John / gf 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
RELEASE.2.MD 55.42 KB
一键复制 编辑 原始数据 按行查看 历史
jianchenma 提交于 2020-10-28 23:34 . donator updates

v1.14.2 (2020-10-27)

GoFrame

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

特点

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

支持我们

OSC最佳开源项目评选开始了,如果您喜欢GoFrame,欢迎为GoFrame投上您宝贵的一票🙏 https://www.oschina.net/p/goframe

Change Log

由于GoFrame是模块化设计,因此每个版本的更新记录都会以模块的形式进行介绍。

重要更新:

  1. 将框架内所有的json操作从标准库替换为json-iterator/go,提高操作效率。
  2. 缓存模块重构底层设计,增加适配器设计模式,并增加内存及Redis适配器支持。其中内存适配器默认核心模块提供,Redis适配器由社区模块提供:https://goframe.org/os/gcache/adapter
  3. 增加可自定义的校验规则注册特性:https://goframe.org/util/gvalid/customrule
  4. Web Server增加所有配置项示例:https://goframe.org/net/ghttp/config/example
  5. ORM新增基于RedisSQL缓存适配器:https://goframe.org/database/gdb/model/cache
  6. ORM新增模型关联实验特性:https://goframe.org/database/gdb/model/association
  7. ORM改进时间自动更新特性增加自定义时间字段:https://goframe.org/database/gdb/model/auto-time
  8. 错误处理模块新增CurrentNext方法:https://goframe.org/errors/gerror/index

net

  1. ghttp
    • Client
      • 增加GetVar/PutVar/PostVar*Var请求方法,用于发起HTTP请求获取内容之后直接返回泛型对象,方便类型转换,特别是针对于返回XML/JSON的结果处理将会更加简便:https://goframe.org/net/ghttp/client/demo/index
      • 增加SetProxy/Proxy方法,用于设置客户端代理,支持HTTP/Socket5代理类型:https://goframe.org/net/ghttp/client/demo/proxy
      • 增加SetRedirectLimit/RedirectLimit方法,用于设置页面跳转数量限制。
    • Request
      • 增加ParseQuery, ParseForm方法,用于解析指定类型的参数,并绑定到给定的对象。
      • 增加GetHeader方法,用于获取指定Header参数。
      • 增加GetRemoteIp方法,用于获取请求客户端IP。在IP白名单限制时应当使用GetRemoteIp而不是GetClientIp进行判断,后者可以通过Header伪造。
      • 增加ReloadParam方法,往往用在中间件处理中,当中间件修改了请求参数,需要通过调用该方法重新解析一下请求参数。
      • 增加GetRouterMap方法,用于获得所有的路由参数返回为map
    • Response
      • Output方法名称改为Flush,用于将缓冲区的数据写入到客户端数据流中。
    • Server
      • Server增加所有配置项示例:https://goframe.org/net/ghttp/config/example
      • 增加SessionCookieOutput配置,用于控制是否输出SessionIdCookie中,默认为开启。
      • 改进路由解析,增加对URI带有重复的/符号的支持。
      • Pprof功能路由支持Domain绑定。
      • 其他一些细节改进。
    • Cookie
      • 增加SetHttpCookie方法,用于根据标准库http.Cookie对象设置Cookie
      • 其他一些功能改进

database

  1. gdb

    • 新增模型关联实验特性:https://goframe.org/database/gdb/model/association
    • 改进时间自动更新特性增加自定义时间字段:https://goframe.org/database/gdb/model/auto-time
    • 新增基于RedisSQL缓存适配器:https://goframe.org/database/gdb/model/cache
    • 新增对输入参数的键名-字段名自动识别映射特性:https://goframe.org/database/gdb/senior
    • 新增DB.HasTable方法,用于判断是否当前数据库存在指定数据表。
    • 新增Model.HasField方法,用于判断是否当前数据表存在指定字段。
    • 新增Model.ScanList方法,用于智能地将当前struct/slice绑定到指定的list对应属性上。
    • 新增Result.MapKeyValue方法,用于将当前Result转换为map[string]Value类型。
    • 新增Result.IsEmpty/Len/Size/ScanList方法。
    • 增加ListItemValuesListItemValuesUnique方法,用于自动获取list中指定名称的键值或属性值,构成slice返回。
    • SQL日志内容增加分组名称打印。
    • 改进DataToMapDeep方法。
    • 其他一些细节改进工作。
  2. gredis

container

  1. gvar
    • 增加ScanScanDeep方法,用于struct/slice自动识别转换。
    • 增加ListItemValuesListItemValuesUnique方法,用于自动获取list中指定名称的键值或属性值,构成slice返回。
    • 增加MapStrAny接口实现方法。

os

  1. gcache

    • 增加GetVar方法,用于获取缓存数据并返回为泛型对象。
    • 增加Update方法,用于仅修改缓存数值,不修改缓存过期时间。
    • 增加UpdateExpire方法,用于仅修改缓存过期时间,不修改缓存数值。
    • 重构底层设计,增加适配器设计模式,并增加内存及Redis适配器支持。其中内存适配器默认核心模块提供,Redis适配器由社区模块提供:https://goframe.org/os/gcache/adapter
    • 注意,本次模块的修改会有部分方法不兼容,部分方法增加了error参数返回,升级时请注意查看。编译时将不会通过。
    • 其他一些功能改进。
  2. gfile

    • 增加ScanDirFileFunc方法,用于自定义函数处理的递归目录文件遍历。
    • 改进Scan*方法,增加递归层级限制,默认层级限制为100000.
  3. gfsnotify

    • 去掉模块初始化时的Watcher对象创建,调整为运行时按需创建,并且增加了并发安全控制。
  4. grpool

    • 增加AddWithRecover方法,用于添加异步任务时给定一个recover处理方法,当任务panic时交由该recover方法处理,防止异步任务panic引起整个进程崩溃。

    这里解决的痛点是recover只能捕获到当前goroutinepanic,因此只能在创建异步任务的时候指定recover处理方法。

  5. gtime

    • 增加ParseDuration方法,增加了对时间单位d的支持,表示天。
    • 改进New方法,支持通过字符串、时间戳、time.Time对象创建gtime.Time对象,https://goframe.org/os/gtime/time
    • 改进Add/AddStr/ToLocation/ToZone/UTCLocal/AddDate/Truncate/Round方法,这些方法调用时,不再修改当前对象本身,而是创建并返回一个新的gtine.Time对象,以便保证和标准库time.Time的逻辑一致,防止混淆。
    • 其他一些细节改进。
  6. gtimer

    • 增加Reset方法,用于重置定时任务的计时。
  7. gfcache

    • 去掉了该模块,该模块的功能作用不是特别大。

debug

  1. gdebug
    • 新增GoroutineId方法,用于获取当前执行的goroutine id,仅作调试使用。

encoding

  1. gjson

    • 新增GetScan/GetScanDeep方法。
    • 新增ToScan/ToScanDeep方法。
    • 新增LoadContentType方法,用于根据指定类型的内容创建Json操作对象。
    • 新增IsValidDataType方法,用于判断给定的数据类型是否支持解析。
    • 其他一些改进。
    • 单元测试完善。
  2. gcompress

    • 新增GzipFile/UnGzipFile基于gzip压缩算法的文件压缩/解压。

i18n

  1. gi18n

text

  1. gstr
    • 增加SnakeFirstUpperCase方法,用于在字母大写前增加连接符,并不会处理数字,例如:SnakeFirstUpperCase("RGBCodeMd5")将会返回rgb_code_md5

util

  1. gconv

    • 增加对指针基本类型的转换支持。
    • 增加Scan/ScanDeep方法,用于自动识别转换Struct/[]Struct
    • 改进MapDeep方法的层级递归处理。
    • 其他一些细节改进,性能改进。
  2. gutil

    • 增加ListItemValuesListItemValuesUnique方法,用于自动获取list中指定名称的键值或属性值,构成slice返回。
    • 增加ItemValue方法,用于获取指定map/*map/struct/*struct类型的键值/属性值。
    • 增加MapOmitEmpty方法,用于过滤map中的空值。
    • 增加SliceDelete方法,用于数组项删除。
    • 增加Try方法,通过闭包执行给定的方法,如果方法产生panic则该方法返回error,否则返回nil
    • 改进TryCatch(try func(), catch ...func(exception interface{}))TryCatch(try func(), catch ...func(exception error))
  3. gvalid

error

  1. gerror
    • 新增Current方法,用于获取当前错误层级的error接口对象。
    • 新增Next方法,用于获取层级错误的下一级错误error接口对象。当下一层级不存在时,返回nil
    • 文档更新:https://goframe.org/errors/gerror/index

Bug Fix

  1. 修复garray模块的Unique方法问题。
  2. 修复glog中定时器懒初始化时的goroutine泄露问题。
  3. 修复gstr中名称Case转换相关方法在名称中带有数字+特殊字符时的名称转换问题。
  4. 修复ghttp模块中的CORS跨域设置Header细节问题。
  5. 其他BUG修复:https://github.com/gogf/gf/issues?q=is%3Aissue+label%3Abug+is%3Aclosed

v1.13.1 (2020-06-10)

GoFrame

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

特点

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

发展

GoFrame开始得比较早,2011年始于北京一个智能物联网平台项目,那时还没有这么多物联网的现行标准,Go的标准库以及生态也未如此丰富。2017年的时候GF才开始发布测试版,20181024程序员节日的时候才发布v1.0正式版,为Go生态发展添砖加瓦。开源以来快速迭代、发展成长,广受开发者和企业的青睐,也有许多的开发者加入了贡献行列。GF原本是为开发团队设计的,因此她的开发效率和可维护性做得非常好,有着很高的代码质量以及丰富的单元测试和示例,并且GF是目前中文化文档做的最好的Golang开发框架。

Change Log

  1. 应多数开发者的要求,框架要求的最低Golang运行版本降级为了v1.11
  2. 新增GoFrame视频教程地址:
  3. 将不常用的guuid模块迁移到 github.com/gogf/guuid 作为社区模块维护,保持gf主仓库的轻量级。
  4. 新增guid模块,用于高效轻量级的唯一字符串生成:https://goframe.org/util/guid/index

tool chain

  1. 工具链更新:https://goframe.org/toolchain/cli
  2. 新增gf env命令,更优雅地查看当前Golang环境变量信息。
  3. 新增gf mod path命令,用于将当前go modules包拷贝到GOPATH中,以便使用原始的GOPATH方式开发项目。
  4. 对现有cli命令进行了一些改进,提高使用体验;预编译二进制版本在部分平台下提供了upx压缩,使得下载的文件更小。

container

  1. garray
    • https://goframe.org/container/garray/index
    • 简化数组使用方式,支持类似于var garray.Array的变量定义使用方式;
    • 增加Walk方法,用于自定义的数组元素处理方法;
    • 增加ContainsI方法,用于大小写忽略匹配的数组元素项存在性查找;
    • 完善单元测试,代码覆盖率94%
    • 代码改进,提高性能;
    • 修复一些问题;
  2. gchan
    • 由于该封装包实际意义不是很大,因此从主框架中删除;
  3. glist
  4. gmap
  5. gset
    • https://goframe.org/container/gset/index
    • 简化集合使用方式,支持类似于var gset.Set的变量定义使用方式;
    • 增加Walk方法,用于自定义的集合元素处理方法;
    • 完善单元测试,代码覆盖率90%
    • 代码改进,提高性能;
  6. gtree
  7. gvar

database

  1. gdb
  2. gredis
    • 增加MaxActive连接池参数默认配置为100,限制默认的连接数量;
    • 改进Conn连接对象的Do方法,支持对map/slice/struct类型进行自动的json.Marshal处理,注意获取数据时使用DoVar方法获取:https://goframe.org/database/gredis/usage
    • 完善单元测试,代码覆盖率72%

net

  1. ghttp

    • 增加PrefixRetry客户端链式操作方法;
    • 增加客户端原始请求打印特性:https://goframe.org/net/ghttp/client/demo/dump
    • 增加ClientMaxBodySize的服务端配置,用于限制客户端提交的Body大小,默认为8MB;在涉及到上传的Server中需要增加该配置的大小,在配置文件中指定对应的大小即可,如ClientMaxBodySize="100MB"https://goframe.org/net/ghttp/config
    • 改进SessionId生成的随机性,提高Session安全性:https://goframe.org/os/gsession/index
    • 改进ghttp.Server实现了标准库的http.Handler接口,便于与其他第三方的服务如Prometheus进行代码集成;
    • 其他大量的代码细节改进工作,提高性能及持久维护性;
    • 完善单元测试,代码覆盖率61%
  2. gipv4

    • 增加GetIpArray方法,用于获取当前主机的所有IPv4地址;
    • 增加GetMacArrayGetMac方法,用于获取当前主机的MAC地址信息;
    • 修改IntranetIP方法名称为GetIntranetIp,修改IntranetIPArray方法名称为GetIntranetIpArray

encoding

  1. gjson
    • 新增GetMaps获取JSON内部节点变量方法;
    • 改进NewWithTag方法对map/struct的处理;
    • 完善单元测试,代码覆盖率77%
  2. gyaml
    • 升级依赖的第三方yaml解析包,解决了map[interface{}]interface{}转换问题;

error

  1. gerror
    • 新增NewfSkip方法,用于创建skip指定堆栈的错误对象;
    • 放开框架所有的堆栈链路打印,展示错误时真实的链路调用详情;

os

  1. gcache

    • 增加GetVar方法,用于获得可以便捷转换为其他数据类型的"泛型"变量;
    • 标记Removes方法废弃,改进Remove方法参数为不定参数,统一使用Remove方法删除单个/多个键值对;
    • 完善单元测试,代码覆盖率96%
  2. genv

    • 增加GetVar方法,用于获得可以便捷转换为其他数据类型的"泛型"变量;
  3. gfile

    • 改进CopyDir/CopyFile复制目录/文件方法;
    • 新增ScanDirFunc方法,用于支持自定义处理回调的目录检索;
    • 完善单元测试,代码覆盖率64%
  4. glog

  5. gres

    • 改进打包特性,增强生成二进制文件及Go文件的压缩比,比旧版本增加20%压缩率,使得编译生成的二进制文件体积更小;
    • 代码结构改进,提高执行效率及可持久维护性;
  6. gsession

    • 改进SessionId默认生成方法,采用guid.S方法生成;
    • 增加SetIdSetIdFunc方法,用于自定义SessionId及自定义的SessionId生成方法;

frame

  1. g
    • 新增g.Table方法,用于快速创建数据库模型操作对象;

i18n

  1. gi18n
    • 新增GetContent方法,用于获取指定i18n关键字为转译内容;
    • 改进代码细节,提高性能和持久可维护性;
    • 完善单元测试,代码覆盖率74%

test

  1. gtest
    • 增加AssertNQ断言方法,用于强类型的不相等判断;

text

  1. gstr
    • 增加SubStrRune方法,用于支持unicode的字符串截取;
    • 增加StrLimitRune方法,用于支持unicode的字符串截断隐藏;
    • 增加LenRune方法,用于替换RuneLen方法,统一方法命名风格;
    • 增加PosRune/PosIRune/PosRRune/PosRIRune方法,用于支持unicode的字符串左右位置查找;
    • 增加CompareVersionGo方法,用于Golang风格的版本号大小比较;
    • 完善单元测试,代码覆盖率75%

util

  1. gconv

    • 改进Convert转换方法,支持常见map类型的转换;
    • 改进类型转换过程中异常错误的捕获,通过error返回;
    • 其他一些细节改进;
    • 完善单元测试,代码覆盖率63%
  2. grand

    • 增加B方法,用于获得随机的二进制数据;
    • 改进代码底层实现,部分接口性能提高50%
    • 完善单元测试,代码覆盖率74%
  3. guid

  4. gutil

    • 增加MapContains方法,用于判断map中是否包含指定键名;
    • 增加MapDelete方法,用于删除map中指定的键名,可以为多个键名;
    • 增加MapMerge方法,用于合并两个map;
    • 增加MapMergeCopy方法,用于拷贝多个map;
    • 增加MapContainsPossibleKey方法,用于查找指定键名,忽略大小写及字符'-'/'_'/'.'/' '
  5. gvalid

    • 所有默认的错误提示改为了英文;
    • 错误提示的配置改为了通过i18n来配置实现,以便支持国际化:https://goframe.org/util/gvalid/message
    • 身份证号规则名称从id-number改为了resident-id
    • 银行卡号规则名称从luhn改为了bank-card
    • 完善单元测试,代码覆盖率96%

Bug Fix

  1. 修复gcompress的多文件zip压缩问题;
  2. 修复ghttp.Client获取返回的过期Cookie的问题;
  3. 修复gres.File对于http.File接口的实现细节;
  4. 修复garray.Pop*方法的边界问题;
  5. 修复gresReaddir方法参数为0时报错的问题;
  6. 其他一些修复:https://github.com/gogf/gf/issues?q=is%3Aissue+label%3Abug

v1.12.1 (2020-03-31)

大家好啊!久等啦!

由于自从上次版本的发布以来,越来越多小伙伴加入了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

v1.11.2 (2020-01-14)

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

GF有着丰富的基础模块、完善的工具链、详尽的开发文档。开源近两年以来,GF得到越来越多小伙伴的肯定和支持,从寂寂无名到现在被广泛应用于微服务、物联网、区块链、电商系统、银行系统等企业级的生产项目中,经历了百万级、千万级项目的考验,2019年度被码云gitee评选为GVP最有价值开源项目。GF正在快速地成长中,目前保持着1-2个月迭代版本的发布规律,社区活跃,欢迎加入GF大家庭。

最后,祝大家2020新年快乐,鼠年大吉!

新特性

  1. 新年新气象,官网文档大量更新:https://goframe.org/index
  2. GF工具链更新:https://goframe.org/toolchain/cli
    • 新增gf run热编译运行命令;
    • 新增gf docker Docker镜像编译命令;
    • 新增gf gen model 强大的模型自动生成命令;
    • gf build命令增加对配置文件配置支持;
    • 大量命令行工具改进工作;
    • 新增自动代理设置特性;
  3. 数据库ORM新特性:

功能改进

container

  1. garray
    • 新增New*ArrayRange方法,用于初始化创建指定数值范围的数组。
    • 新增Iterator*方法,用于数组项元素回调遍历。
    • 完善单元测试。
  2. gvar
    • 改进MapStrStrMapStrStrDeep方法实现。

net

  1. ghttp
    • 改进HTTP客户端,增加对提交参数的自动Content-Type识别功能。
    • Request对象增加Parse方法,用于快捷的对象转换即参数校验。
    • Request.GetPost*方法全部标记为deprecated,统一客户端参数提交方式为QueryString, Form, Body
    • 去掉Response模板解析时的Get/Post内置变量,新增Query, Form, Request内置变量:https://goframe.org/net/ghttp/response/template
    • 改进Response.WriteJson*Response.WriteXml*方法,增加对string, []byte类型参数的支持。
    • Server新增GetRouterArray方法,用于向应用层暴露并获取Server的路由列表。
    • Server新增Use方法,该方法为BindMiddlewareDefault的别名,用以全局中间件的注册。
    • Server新增RouteOverWrite配置项,用于控制是否在注册路由冲突时自动覆盖,默认关闭并提示。
    • Server新增Graceful配置项,用于在单服务场景下控制平滑重启特性的开启/关闭,默认开启。
    • 完善单元测试。
  2. gtcp
    • 改进简单协议下的数据包发送接收功能。
    • 将连接池默认的缓存过期时间30秒修改为10秒。
    • 完善单元测试。

database

  1. gdb
    • 新增As数据表别名方法。
    • 改进数据表、字段的安全字符自动识别添加功能。
    • 新增DB数据库对象切换方法。
    • 新增TX链式操作事务支持方法。
    • 完善单元测试。

os

  1. gcfg

    • 新增GetMapStrStr方法。
  2. gcmd

    • 增加参数解析的strict严格参数,默认严格解析,不存在指定参数/选项名称时则报错返回。
  3. genv

    • 改进Remove方法支持多个环境变量的删除。
  4. gfile

    • 改进TempDir临时目录获取方法,在*nix系统下默认为/tmp目录。
    • 新增ReadLines, ReadByteLines方法,用以按行回调读取文件内容。
    • 新增Copy*方法,用以文件/目录的拷贝,支持递归。
    • 新增Replace*方法,用以目录下的文件内容替换,支持递归。
    • 改进Scan*方法,用以检索并返回指定目录下的所有文件/目录,支持文件模式指定,支持递归。
    • 完善单元测试。
  5. gproc

    • 改进命令行运行方法。
    • 改进Shell命令文件检索逻辑。
    • 改进实验性的进程间通信设计。
  6. gtime

    • 将包方法以及Time对象的时间戳方法Second, Millisecond, Microsecond, Nanosecond标记为废除, 并新增Timestamp, TimestampMilli, TimestampMicro, TimestampNano替换。
    • 需要注意的是以上修改可能和老版本存在兼容性问题。
  7. gview

    • 解析功能、缓存设计改进。
    • 新增encode, decodeHTML编码/解码模板函数。
    • 新增concat字符串拼接模板函数。
    • 新增dump模板函数,功能类似于g.Dump方法。
    • 新增AutoEncode配置项,用于自动转码输出的HTML内容,常用于防止XSS,默认关闭。需要注意的是该特性并不会影响include内置函数: https://goframe.org/os/gview/xss
    • 单元测试完善。

crypto

  1. gmd5
    • 增加MustEncrypt, MustEncryptBytes, MustEncryptString, MustEncryptFile方法。
  2. gsha1
    • 增加MustEncryptFile方法

encoding

  1. gbase64
    • 新增MustEncodeFile, MustEncodeFileToString, MustDecode, MustDecodeToString方法。
  2. gjson/gparser
    • 新增GetMapStrStr方法。
    • 新增Must*方法,用于指定数据格式的转换失败时产生panic错误,而不会返回error参数。

util

  1. gconv
    • 改进Convert方法增加对[]int32, []int64, []uint, []uint32, []uint64, []float32, []float64数据类型的转换支持。
    • 改进String字符串转换方法对指针参数的支持。
    • 改进Map* Map转换方法的代码结构及性能。
    • 新增Floats, Float32s, Float64s[]float32, []float64类型转换方法。
    • 新增Ints, Int32s, Int64s[]int, []int32, []int64类型转换方法。
    • 新增Uints, Uint32s, Uint64s[]uint, []uint32, []uint64类型转换方法。
    • 完善单元测试。

frame

  1. gins
    • 所有的单例对象在获取失败时产生panic错误。

Bug Fix

  1. 增加对常见错误路由格式例如/user//index的兼容支持。
  2. 修复gtcp/gudp在数据接收时的间隔时间单位问题。
  3. 修复gfile/gspath/gfsnotify包对文件的存在性判断不严谨问题。
  4. 修复gproc.Kill方法在windows系统下的运行阻塞问题。
  5. 修复gstr.TrimLeftStr/gstr.TrimRightStr在被替换字符串长度小于替换字符串长度时的数组溢出问题。

v1.10.0 (2019-12-05)

各位gfer久等了,较上一次发布时间过去已有两个多月了,这段时间GF也在不断地迭代改进,细节比较多,拟了个大概,以下是release log

另外,GoFrame也参加了2019最受欢迎中国开源软件评选投票,明天就结束了,欢迎为GF投票啊:https://www.oschina.net/project/top_cn_2019 网页可以投一票,微信也可以投一票。

新特性

  1. Web Server新特性:
  2. Session增加内置的多种Storage实现:
  3. 增加日志组件单例对象,并优化配置管理:
  4. 常用的container容器增加JSON数据格式的Marshal/UnMarshal接口实现:
  5. 新增guuid模块,用于通用的UUID生成:https://goframe.org/util/guuid/index

功能改进

net

  1. ghttp
    • 改进请求流程处理性能;
    • Server增加对Logger日志对象的配置;
    • Server开放了GetRouterMap方法,用于获得当前服务的路由列表信息,使得开发者可以更方便地实现自定义权限管理;
    • Server配置管理优化;
    • Client客户端对象进行了大量的改进工作;
    • Client客户端对象增加多文件上传功能;
    • Request对象增加GetError方法,用于获取当前处理错误;
    • Request对象增加独立的视图对象及视图变量绑定功能,使得每个请求可以独立视图管理,也可以通过中间件切换请求对象的视图对象。默认情况下该功能关闭,视图解析时使用的是Server对象的视图对象;
    • 改建Response对象的CORS功能;
    • 增加Response.WriteTplDefault方法,用于解析并返回默认的模板内容;
    • 增加更多的单元测试用例;
    • 其他改进;
  2. gipv4/gipv6
    • 一些改进工作;
  3. gtcp/gudp
    • 一些改进工作;

database

  1. 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
    • 增加字段排除方法FieldsExhttps://goframe.org/database/gdb/senior
    • 增加日志功能特性:https://goframe.org/database/gdb/senior
    • 改进数据库配置管理:https://goframe.org/database/gdb/config
    • 增加大量单元测试;
  2. gredis

os

  1. gcache
    • 需要注意了:缓存的有效时间参数从interface{}类型调整为了time.Duration类型,因此不再兼容之前的int参数类型,以保证更好的性能;
  2. gfcache
    • 由于gcache组件的缓存时间参数类型的变更,因此该组件的时间参数也变更为了time.Duration类型;
  3. gcfg
    • 增加Available方法,用以判断配置是否有效;
  4. gfile
    • 增加Chdir方法,用于工作目录切换;
  5. gtime
    • 增加JSON数据格式的Marshal/UnMarshal接口实现;

container

  1. gmap
    • 增加MapStrAny方法,用于常见map类型的转换;
    • 增加MapCopy方法,用于底层map数据复制;
    • 增加FilterEmpty方法,用于map空值过滤;
    • 增加Pop/Pops方法,用于随机返回map中的数据项(并删除);
    • 增加Replace方法,用于给定的map数据覆盖底层map数据项;
    • 完善单元测试;
    • 其他改进;
  2. garray
    • 增加Interfaces转换方法,返回[]interface{}类型;
    • 对排序数组增加SetComparator方法用户自定义修改比较器;
    • 完善单元测试;
    • 其他改进;
  3. glist
    • 增加NewFrom方法,基于给定的[]interface{}变量创建链表;
    • 增加Join方法,用于将链表项使用给定字符串连接为字符串返回;
    • 完善单元测试;
    • 其他改进;
  4. gset
    • 增加AddIfNotExistFunc/AddIfNotExistFuncLock方法;
    • 完善单元测试;
    • 其他改进;
  5. gtree
    • 增加Replace方法,用于更新现有树的数据项;
    • 其他改进;
  6. gtype
    • 一些细节改进工作,不一一列出;
    • 完善基准测试、单元测试;
  7. gvar
    • 增加Ints/Uints类型转换方法;
    • 其他改进;

crypto

  1. gmd5
    • 小细节改进;
  2. gsha1
    • 小细节改进;

text

  1. gstr
    • 改进SplitAndTrim方法,将SplitAndTrimSpace标记为deprecated
    • 增加TrimStr方法;
    • 完善单元测试;
    • 其他改进;

debug

  1. gdebug
    • 增加CallerFileLineShort/FuncPath/FuncName方法;
    • 其他改进;

encoding

  1. gbase64
    • 增加EncodeToString/EncodeFile/EncodeFileToString/DecodeToString方法;
    • 完善单元测试;
  2. gjson
    • 完善单元测试;

frame

  1. g/gins

util

  1. gconv
    • 改进优化部分类型转换方法性能;
    • 增加Uints/SliceUint类型转换方法;
    • 增加UnsafeStrToBytes/UnsafeBytesToStr高性能的类型转换方法;
    • 增加对MapStrAny接口方法的支持,用于常见map类型的转换;
    • 其他改进;
  2. gvalid
    • 改进对中国身份证号的识别校验功能;
    • 增加luhn银行卡号的校验功能;
  3. grand
    • 一些性能改进工作;

Bug Fix

  1. 解决WebSocket关闭时的hijacked报错问题:https://github.com/gogf/gf/issues/381
  2. 解决静态文件服务时大文件的内存占用问题;
  3. 修复前置Nginx后默认情况下的Cookie域名设置问题;
  4. 修复gconv.Struct在属性为[]struct并且输入属性参数为空时的转换失败问题:https://github.com/gogf/gf/issues/405
  5. 其他一些修复;

v1.9.3 (2019-09-24)

该版本实际为v2.0的大版本发布,为避免go module机制严格要求v2版本以上需要修改import并加上v2后缀,因此使用了v1.9版本进行发布。

新特性

  1. 新增gf命令行开发辅助工具:https://goframe.org/toolchain/cli
  2. 新增gres资源管理器模块:https://goframe.org/os/gres/index
  3. 重构Session功能,新增gsession模块,WebServer默认使用文件存储Sessionhttps://goframe.org/net/ghttp/session
  4. WebServer新增中间件特性,并保留原有的HOOK设计,两者都可实现请求拦截、预处理等等特性:https://goframe.org/net/ghttp/router/middleware
  5. 新增gi18n国际化管理模块:https://goframe.org/i18n/gi18n/index
  6. 新增gini模块:https://goframe.org/encoding/gini/index
  7. WebServer新增更便捷的层级路由注册方式:https://goframe.org/net/ghttp/group/level
  8. gcmd命令行参数解析模块重构,增加Parser解析对象:https://goframe.org/os/gcmd/index
  9. 新增gdebug模块,用于堆栈信息获取/打印:https://goframe.org/debug/gdebug/index

重大调整

  1. 去掉1.x版本中已经被标记为deprecated的方法;
  2. 调整container分类的容器模块,将默认并发安全参数调整为默认非并发安全;
  3. 目录调整:
    • 去掉third目录,统一使用go module管理包依赖;
    • 将原有g目录中的模块移出到框架主目录,原有的g模块移动到frame/g目录;
    • 将原有geg示例代码目录名称修改为.example

功能改进

  1. ghttp
    • 改进Request参数解析方式:https://goframe.org/net/ghttp/request
    • 改进跨域请求功能,新增Origin设置及校验功能:https://goframe.org/net/ghttp/cors
    • CookieSessionTTL配置数据类型修改为time.Duration;
    • 新增允许同时通过Header/Cookie传递SessionId
    • 新增ConfigFromMap/SetConfigWithMap方法,支持通过map参数设置WebServer;
    • 改进默认的CORS配置,增加对常见Header参数的默认支持;
    • 新增IsExitError方法,用于开发者自定义处理recover错误处理时,过滤框架本身自定义的非异常错误;
    • 新增SetSessionStorage配置方法,用于开发者自定义Session存储;
    • ghttp.Request新增更多的参数获取方法;
  2. gdb
    • 增加对SQL中部分字段的自动转义(Quote)功能;
    • 增加对方法操作以及链式操作中的slice参数的支持;
    • 增加SetLogger方法用于开发者自定义数据库的日志打印;
    • 增加Master/Slave方法,开发者可自主选择数据库操作执行的主从节点;
    • 增加对mssql/pgsql/oracle的单元测试;
    • debug模式支持完整带参数整合的SQL语句调试打印;
    • 增加了更多的功能方法;
  3. glog
    • 新增Default方法用于获取默认的Logger对象;
    • 新增StackWithFilter方法用于自定义堆栈打印过滤;
    • 增加了更多的功能方法;
  4. gfile
    • 部分方法名称调整:Get/PutBinContents修改为Get/PutBytes
    • 增加ScanDirFile方法,用于仅检索文件目录,支持递归检索;
    • 增加了更多的功能方法;
  5. gview
    • 新增SetI18n方法用于设置视图对象自定义的gi18n国际化对象;
    • 新增对gres资源管理器的内置支持;
  6. gcompress
    • 增加zip算法的文件/目录的压缩/解压方法;
    • 文件/目录压缩参数支持多路径;
  7. gconv
    • 改进对[]byte数据类型参数的支持;
    • 新增Unsafe转换方法,开发者可在特定场景下使用,提高转换效率;
    • 新增MapDeep/StructDeep/StructsDeep方法,支持递归struct转换;
  8. gjson/gparser
    • 改进类型自动识别功能;
    • 新增LoadJson/LoadXml/LoadToml/LoadYaml/LoadIni方法用于自定义的数据类型内容加载;
    • 增加了更多的功能方法;
  9. gerror
    • 改进错误堆栈获取逻辑;
    • 增加了更多的功能方法;
  10. gmap/garray/gset/glist/gvar
    • 改进并发安全基准测试脚本;
    • 修改garray.StringArraygarray.StrArray
    • 增加了更多的功能方法;
  11. gdes
    • 规范化修改方法名称;
  12. gstr
    • 增加Camel/Snake相关命名转换方法;
    • 增加了更多的功能方法;
  13. genv
    • 增加了更多的功能方法;

Bug Fix

  1. 修复gvalid校验struct时的tag自定义错误失效的问题;
  2. 修复gcfg配置管理模块在特定情况下的内容类型自动识别失败问题;
  3. 修复gqueue在用户主动关闭队列时的并发安全问题;
  4. 修复session在开发者设置的TTL过大时的整型变量溢出问题;
Go
1
https://gitee.com/cgo6/gf.git
git@gitee.com:cgo6/gf.git
cgo6
gf
gf
master

搜索帮助