由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web"框架"为主。这里稍微打了个引号,因为大部分"框架"从设计和功能定位上来讲,充其量都只能算是一个组件,需要项目使用的话得自己四处再去找找其他的组件,或者自己造轮子。如果用于Web开发,这些"框架"的Web开发能力均已完备,无太大差别,且均是自标准库net/http.Server的二次封装。由于框架众多,这里笔者只选择了几个曾做过技术选型评估、较为熟悉,且目前比较流行和典型的Golang"框架",从适用于业务项目开发框架的角度,做一个简单的横向比较,以便大家在项目框架选型时做个参考。

评估指标 基本介绍 来源各自官网。 模块化设计 是否支持模块化插拔设计、模块之间低耦合设计,是否可以独立使用其中某部分组件。 模块完善度 框架提供的功能模块是否丰富。模块能否能覆盖日常普遍的开发需求。 使用易用性 易用性不仅仅是值框架好不好用,更多是团队能否在低成本下快速接入,长期来看能否低成本维护。 文档完善性 参考官网提供的介绍资料,包括但不限于:文档、视频、示例、案例资料。同时,本地中文文档支持也是参考项。 工程化完备 是否能够快速接入项目开发,是否提供项目接入规范、设计模式、开发工具链,文档是否完善、源码是否易读、是否便于长期维护。 开发模式 框架适用的开发模式,或者官方推荐的开发模式。 工程规范 项目接入时的开发规范,如目录规范、设计规范、编码规范、命名规范等。 社区活跃 官方与社区沟通是否便捷,问题是否能够快速解答,BUG是否能够快速响应处理。 开发工具链 项目开发时使用到的CLI开发工具,如初始化项目、交叉编译、代码生成、swagger、热编译能力等等。 Web: 性能测试

来源第三方评测 https://github.com/the-benchmarker/web-frameworks 。

Web: 路由冲突处理 存在路由注册冲突时有无良好的解决方案,在业务项目开发中比较常见。 Web: 域名支持 Web路由是否支持域名绑定,甚至多域名的绑定。 Web: 文件服务 Web服务是否提供静态资源的访问能力。 Web: 优雅重启/关闭 Web服务在重启时不会影响请求执行,关闭时会等待正在执行的请求处理完,新请求不再接入。 ORM 框架是否自带ORM组件,ORM组件是业务项目的核心组件。无论是自研还是通过第三方组件引入。 Session 框架是否提供会话管理组件,无论是通用型Session组件,还是仅针对于Web服务的Session组件。 I18N支持 国际化组件支持(常用但非核心组件)。 配置管理 配置管理也是框架需要完备的核心组件能力。 日志组件 日志组件也是框架需要完备的核心组件能力。 数据校验 数据校验也是框架需要完备的核心组件能力。 缓存管理 缓存管理也是框架需要完备的核心组件能力。无论是内存还是Redis,无论是自研还是通过第三方组件引入。 资源打包 支持将依赖的文件资源例如静态资源、配置文件等固定文件编译到可执行文件中。框架组件自动支持资源检索。 链路跟踪 框架是否具备分布式链路跟踪能力,分布式跟踪在微服务架构中是必不可少的能力。 测试框架 框架是否支持单元测试接入,提供单元测试接入规范。无论是使用标准库还是第三方测试框架。 缺点 比较明显的几点缺点。 横向比较
  • 以下部分对比参数涉及评分的部分,满分总共按照10分为标准。
  • 如果标记为"-"的部分,表示不支持或者需要引入第三方插件支持。
  • 以下特性如果官网提供文档则直接提供文档地址,找不到文档但是笔者知道有就会简单标注。
比较版本 v1.15.2 v1.12.3 v12.0.2 v1.6.3 项目类型 开源(国内) 开源(国内) 开源(海外) 开源(海外) 开源协议 MIT Apache-2 BSD-3-Clause MIT 框架类型 模块化框架 Web框架 Web"框架" Web"框架"

基本介绍

工程完备、简单易用,模块化、高质量、高性能、企业级开发框架。 最简单易用的企业级Go应用开发框架。 目前发展最快的Go Web框架。提供完整的MVC功能并且面向未来。 一个Go语言写的HTTP Web框架。它提供了Martini风格的API并有更好的性能。 项目地址

github.com/gogf/gf

github.com/beego/beego github.com/kataras/iris github.com/gin-gonic/gin 官网地址 goframe.org beego.me iris-go.com gin-gonic.com

模块化设计

是 - - - 模块完善度 10 6 4 2

使用易用性

9 9 9 10

文档完善度

10 8 6 4 工程化完备 10 8 5 1 社区活跃 9 10 9 10 开发模式 模块引入、三层架构、MVC MVC MVC - 工程规范 分层设计、对象设计 项目结构 - - 开发工具链 gf工具链 bee工具链 - - Web: 性能测试 10 8 8 9 Web: HTTPS HTTPS & TLS 支持 CustomHttpConfiguration 支持 Web: HTTP2 - - 支持 支持 Web: WebSocket WebSocket服务 有 有 - Web: 分组路由 分组路由 Namespace GroupingRoutes 有 Web: 路由冲突处理 有 - 有 - Web: 域名支持 域名绑定 - - - Web: 文件服务 静态文件服务 静态文件处理 ServingStaticFiles 有 Web: 多端口/实例 多端口监听、多实例监听 - RunMultipleServiceUsingIris - Web: 优雅重启/关闭 平滑重启特性 热升级 GracefulShutdownOrRestart - ORM ORM文档 ORM文档 - - Session Session Session 有 - I18N支持 I18N I18N Localization - 模板引擎 模板引擎 View设计 TemplateRendering STD Template 配置管理 配置管理 参数配置 - - 日志组件 日志组件 Logging - - 数据校验 数据校验 表单数据验证 - - 缓存管理 缓存管理 Cache - - 资源打包 资源管理 bee工具bale命令 - - 链路跟踪 链路跟踪 - - - 测试框架 单元测试 - Testing Testing 突出优点 goframe主要以工程化和企业级方向为主,特别是模块化设计和工程化设计思想非常棒。针对业务项目而言,提供了开发规范、项目规范、命名规范、设计模式、开发工具链、丰富的模块、高质量代码和文档,社区活跃。作者也是资深的PHP开发者,PHP转Go的小伙伴会倍感亲切。 beego开源的比较早,最早的一款功能比较全面的Golang开发框架,一直在Golang领域有着比较大的影响力,作者谢大多年组织着国内影响力比较大GopherCN活动。beego有着比较丰富的开发模块、开箱即用,提供了基于MVC设计模式的项目结构、开发工具链,主要定位为Web开发,当然也可以用于非Web项目开发。 iris主要侧重于Web开发,提供了Web开发的一系列功能组件,基于MVC开发模式。iris这一年发展比较快,从一个Web Server的组件,也慢慢朝着beego的设计方向努力。 gin专注于轻量级的Web Server,比较简单,易于理解,路由和中间件设计不错,可以看做替代标准库net/http.Server的路由加强版web server。献给爱造轮子的朋友们。 突出缺点 开源时间较晚,推广过于佛系,目前主要面向国内用户,未推广海外。 起步较早,自谢大创业后,近几年发展较慢。非模块化设计,对第三方重量级模块依赖较多。

号称性能最强,结果平平。非模块化设计。最近两年开始朝beego方向发展,但整体框架能力还不完备,需要加油。

功能简单易用,既是优点,也是缺点。 综合选择

经过一些比较以及内部团队的交流,目前公司主要选择goframe作为项目主体框架。原因很简单,只有它满足了我们项目对于框架的基本要求。并且goframe的中文文档做得很棒,源码适合学习,团队容易快速上手。还有一个重要原因,我们的团队大部分都是PHP转Go,使用goframe写了几个demo就倍感亲切😀,容易在PHP团队中快速推广Golang技术。此外,由于框架是模块化设计,我们也可以按需引用,个别模块我们可以替换为公司自研模块。

 

参考连接:

https://itician.org/pages/viewpage.action?pageId=3673375

 


这里给大家推荐一个在线软件复杂项交易平台:米鼠网 https://www.misuland.com

米鼠网自成立以来一直专注于从事软件项目、人才招聘、软件商城等,始终秉承“专业的服务,易用的产品”的经营理念,以“提供高品质的服务、满足客户的需求、携手共创双赢”为企业目标,为中国境内企业提供国际化、专业化、个性化、的软件项目解决方案,我司拥有一流的项目经理团队,具备过硬的软件项目设计和实施能力,为全国不同行业客户提供优质的产品和服务,得到了客户的广泛赞誉。