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

GoFrame v1.14.1 强势发布!模块化、高性能、生产级的 Go 开发框架

  •  
  •   johng · 2020-10-27 00:15:23 +08:00 · 3315 次点击
    这是一个创建于 1275 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    17 条回复    2020-10-29 21:27:58 +08:00
    yrj
        1
    yrj  
       2020-10-27 03:48:07 +08:00 via iPad
    支持一下封装狂魔的国产框架,不过我选了 fiber
    wzw
        2
    wzw  
       2020-10-27 04:53:47 +08:00 via iPhone
    超级好用
    justin2018
        3
    justin2018  
       2020-10-27 05:19:19 +08:00
    支持一下
    musi
        4
    musi  
       2020-10-27 06:53:00 +08:00 via iPhone
    已 star,最近刚好在学 go,可以试一下
    sunorg
        5
    sunorg  
       2020-10-27 06:53:56 +08:00 via Android
    不错不错,正好新项目就用他。
    lidongyo
        6
    lidongyo  
       2020-10-27 08:55:34 +08:00
    看着听不错的,顶一顶
    lidongyo
        7
    lidongyo  
       2020-10-27 08:56:09 +08:00
    @lidongyo 看着挺不错的,顶一顶
    danbai
        8
    danbai  
       2020-10-27 09:10:06 +08:00 via Android
    特别喜欢这个框架。。
    lower
        9
    lower  
       2020-10-27 09:22:44 +08:00
    新注册用户 3 天后才能投票……
    reus
        10
    reus  
       2020-10-27 09:57:08 +08:00
    额外的封装都是多余
    beidounanxizi
        11
    beidounanxizi  
       2020-10-27 10:22:43 +08:00
    多少有点民科
    Hanggi
        12
    Hanggi  
       2020-10-27 10:24:45 +08:00
    能问下,为什么不放到 github 上吗?
    sunmoon1983
        13
    sunmoon1983  
       2020-10-27 10:47:32 +08:00
    eudore
        14
    eudore  
       2020-10-27 10:55:17 +08:00
    单元测试先到 95%以上在说,都这么多年了还才 69%,有没有 race 测试都不知道。测试覆盖率报告: https://codecov.io/gh/gogf/gf/branch/master

    以前看到的 gmap 组件的软文(18 年),单线程去对比测试 sync.Map ,得出的比 sync.Map 块一倍性能结果 2020 年看还在,这样低价错误严重怀疑水平。

    代码质量报告: https://goreportcard.com/report/github.com/gogf/gf

    69%叫做高覆盖率,别人 98%、100%叫啥,goreportcard 的检查问题一堆也叫高代码质量,基本的 gofmt 都没有,注水真严重,多的就没看了。
    vus520
        15
    vus520  
       2020-10-27 11:02:52 +08:00
    @eudore 点评很专业,不知道有哪些 100%覆盖的全栈框架,求推荐一下,目前在用 gf,整体感觉还是不错。
    lemayi
        16
    lemayi  
       2020-10-27 11:57:20 +08:00
    强烈支持
    labulaka521
        17
    labulaka521  
       2020-10-29 21:27:58 +08:00 via iPhone
    @eudore golang 哪些库测试覆盖率在 98 、100,学习学习
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1294 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:46 · PVG 01:46 · LAX 10:46 · JFK 13:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.