原文地址:https://goframe.org/pages/viewpage.action?pageId=3673375
由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web"框架"为主。这里稍微打了个引号,因为大部分"框架"从设计和功能定位上来讲,充其量都只能算是一个组件,需要项目使用的话得自己四处再去找找其他的组件,或者自己造轮子。如果用于Web开发,这些"框架"的Web开发能力均已完备,无太大差别,且均是自标准库net/http.Server的二次封装。由于框架众多,这里笔者只选择了几个曾做过技术选型评估、较为熟悉,且目前比较流行和典型的Golang"框架",从适用于业务项目开发框架的角度,做一个简单的横向比较,以便大家在项目框架选型时做个参考。
评估指标
指标 |
说明 |
---|---|
基本介绍 | 来源各自官网。 |
模块化设计 | 是否支持模块化插拔设计、模块之间低耦合设计,是否可以独立使用其中某部分组件。 |
模块完善度 | 框架提供的功能模块是否丰富。模块能否能覆盖日常普遍的开发需求。 |
使用易用性 | 易用性不仅仅是值框架好不好用,更多是团队能否在低成本下快速接入,长期来看能否低成本维护。 |
文档完善性 | 参考官网提供的介绍资料,包括但不限于:文档、视频、示例、案例资料。同时,本地中文文档支持也是参考项。 |
工程化完备 | 是否能够快速接入项目开发,是否提供项目接入规范、设计模式、开发工具链,文档是否完善、源码是否易读、是否便于长期维护。 |
开发模式 | 框架适用的开发模式,或者官方推荐的开发模式。 |
工程规范 | 项目接入时的开发规范,如目录规范、设计规范、编码规范、命名规范等。 |
社区活跃 | 官方与社区沟通是否便捷,问题是否能够快速解答,BUG是否能够快速响应处理。 |
开发工具链 | 项目开发时使用到的CLI开发工具,如初始化项目、交叉编译、代码生成、swagger、热编译能力等等。 |
Web: 性能测试 | |
Web: 路由冲突处理 | 存在路由注册冲突时有无良好的解决方案,在业务项目开发中比较常见。 |
Web: 域名支持 | Web路由是否支持域名绑定,甚至多域名的绑定。 |
Web: 文件服务 | Web服务是否提供静态资源的访问能力。 |
Web: 优雅重启/关闭 | Web服务在重启时不会影响请求执行,关闭时会等待正在执行的请求处理完,新请求不再接入。 |
ORM | 框架是否自带ORM组件,ORM组件是业务项目的核心组件。无论是自研还是通过第三方组件引入。 |
Session | 框架是否提供会话管理组件,无论是通用型Session组件,还是仅针对于Web服务的Session组件。 |
I18N支持 | 国际化组件支持(常用但非核心组件)。 |
配置管理 | 配置管理也是框架需要完备的核心组件能力。 |
日志组件 | 日志组件也是框架需要完备的核心组件能力。 |
数据校验 | 数据校验也是框架需要完备的核心组件能力。 |
缓存管理 | 缓存管理也是框架需要完备的核心组件能力。无论是内存还是Redis,无论是自研还是通过第三方组件引入。 |
资源打包 | 支持将依赖的文件资源例如静态资源、配置文件等固定文件编译到可执行文件中。框架组件自动支持资源检索。 |
链路跟踪 | 框架是否具备分布式链路跟踪能力,分布式跟踪在微服务架构中是必不可少的能力。 |
测试框架 | 框架是否支持单元测试接入,提供单元测试接入规范。无论是使用标准库还是第三方测试框架。 |
突出优点 | 比较明显的几点优点。 |
突出缺点 | 比较明显的几点缺点。 |
横向比较
- 以下部分对比参数涉及评分的部分,满分总共按照10分为标准。
- 如果标记为"-"的部分,表示不支持或者需要引入第三方插件支持。
- 以下特性如果官网提供文档则直接提供文档地址,找不到文档但是笔者知道有就会简单标注。
- 各个"框架"功能特性实现不同,在文档、功能、易用性上存在较大差异,各位朋友可自行查阅链接。
|
GoFrame |
Beego |
Iris |
Gin |
---|---|---|---|---|
比较版本 | v1.15.2 |