V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
johng
V2EX  ›  Go 编程语言

GoFrame v1.13.1 发布, Go 应用开发框架

  •  
  •   johng · 2020-06-09 23:18:43 +08:00 · 3081 次点击
    这是一个创建于 1657 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    4 条回复    2020-06-17 12:03:59 +08:00
    CodeCore
        1
    CodeCore  
       2020-06-09 23:35:37 +08:00 via iPhone
    赞赞赞赞
    lovesky
        2
    lovesky  
       2020-06-09 23:38:17 +08:00 via Android
    一直在用 明天升级
    sxfscool
        3
    sxfscool  
       2020-06-10 08:54:10 +08:00
    自己造了这么多轮子么[捂脸]
    vus520
        4
    vus520  
       2020-06-17 12:03:59 +08:00
    封装之王。但我建议还是引入和直接使用 gin 和 echo 的相关的基础组件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3891 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:01 · PVG 09:01 · LAX 17:01 · JFK 20:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.