GoFrame v1.14.1 强势发布!模块化、高性能、生产级的 Go 开发框架 - V2EX
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 4016 次点击
    这是一个创建于 1897 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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/Trncate/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  
    PRO
       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     Solana     3343 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 11:27 PVG 19:27 LAX 03:27 JFK 06:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86