基于 Go 的 Web 框架调研
基于 Go 的 Web 框架调研
概述
调研总体目标
找出适合企业应用后台研发的 Go Web 框架
调研考察方向
项目完善程度:
- 功能完善: 路由, 模板, 插件/扩展, ORM, 命令行工具, 日志, 国际化支持, 测试集成功能
- 扩展机制是否便捷, 扩展相关生态是否活跃(可选扩展模块)
- 是否有独有的功能/特性
- 文档是否完善 (判断标准: 是否与版本相关? 最近更新时间? 中文文档?)
- 测试完善度 (测试覆盖率等)
项目活跃度:
- 近期发布版本: 是否半年内, 至少是一年内? 最近一年是否有 2+ 次正式版本?
- 社区活跃度:
- 代码贡献人数
- issue 情况, 提问质量及解决情况
- 中文社区, 或者中文使用者
项目发展情况:
- 人员支持稳定性: 主要贡献人是否有独立公司/稳定技术人员, 是否大公司支持
- 是否有稳定/明确的版本计划和路线图
- 总应用实例数-参考
Go Web 框架情况对比
候选框架
项目完善程度
功能对比
| 考察方向 | 功能/特性 | Gin | Echo | Martini | Go Buffalo | Revel | Beego | GoFrame |
|---|---|---|---|---|---|---|---|---|
| 功能 | url路由配置 | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| 功能 | cookie/session | Yes | Yes | Yes(3rd) | Yes | Yes | Yes | Yes |
| 功能 | 请求-绑定(data binding) | Yes | Yes | Yes(3rd) | Yes | Yes | Yes | Yes |
| 功能 | 请求-校验(validator) | Yes | Yes | Yes(3rd) | Yes | Yes | Yes | Yes |
| 功能 | 数据库-orm | No | No | No | Yes | No | Yes | Yes |
| 功能 | 日志组件 | Yes | Yes | Yes(3rd) | Yes | Yes | Yes | Yes |
| 功能 | 静态文件访问 | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| 功能 | 模板 | Yes | Yes | Yes(3rd) | Yes | Yes | Yes | Yes |
| 功能 | 测试组件 | Yes | Yes | No | Yes | Yes | No(有文档参考) | Yes |
| 功能 | 支持中间件 | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| 功能 | 组件自定义/替换? | Yes | Yes | Yes | Yes | Yes | Yes(部分) | Yes(部分) |
| 功能 | 命令行工具 | No | No | No | Yes | Yes | Yes | Yes |
| 功能 | 支持 HTTP2 | Yes | Yes | No | Yes | No | No | No |
| 功能 | 特色功能 | / | / | / | 热加载, 后台任务, 命令扩展-插件等 |
热加载等 |
自带监控工具等 |
/ |
| 项目测试情况 | 覆盖率 | 98% | 84% | / | / | / | / | 72% |
| 项目支持 | 是否有官方网站 | Yes | Yes | No | Yes | Yes | Yes | Yes |
| 项目支持 | 文档-是否有官方文档 | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| 项目支持 | 文档-是否有中文文档 | Yes | No | Yes | No | No | Yes | Yes |
| 项目支持 | 是否有专门社区 | No | Yes | Yes | No (stackoverflow) | No | Yes | No |
| 项目支持 | 是否有官方群、聊天社区 | gitter.im | Twitter/gitter.im | No | slack | gitter.im | 多种 | Yes(QQ,微信,Github Issue) |
| 项目支持 | 是否有中文社区 | No | No | No | No | No | Yes | No |
| 项目许可 | 许可协议类型 | MIT | MIT | MIT | MIT | MIT | Apache 2.0 | MIT |
| 项目活跃度 | 最近版本 | v1.4.0 (2019-05-08) | v4.1.11 (2019-10-07) | v1.0 (2014-05-20) | v0.15.1 (2019-11-21) | v0.21.0(2018-10-30) | v1.10.0(2018-07-21) | v1.9.10(2019-10-24) |
| 项目活跃度 | 近半年版本数(含非 release 版本) | 0 | 6 | 0 | 19 | 0 | 0 | 17 |
| 项目活跃度 | issue closed | 1095 | 893 | 210 | 694 | 831 | 1894 | 231 |
| 项目活跃度 | issue open | 179 | 27 | 4 | 54 | 80 | 731 | 82 |
| 项目活跃度 | fork 数目 | 3.8 k | 1.4 k | 1.1 k | 411 | 1.4 k | 4.6 k | 287 |
| 项目活跃度 | 过去1月 merged pr | 7 | 4 | 0 | 14 | 0 | 1 | 1 |
| 项目活跃度 | 过去1月 proposed pr | 7 | 9 | 0 | 3 | 0 | 4 | 1 |
| 项目活跃度 | 过去1月 new issue | 16 | 6 | 0 | 7 | 3 | 19 | 21 |
| 项目活跃度 | 过去1月 closed issue | 20 | 14 | 0 | 12 | 1 | 3 | 10 |
| 项目发展情况 | 业界应用数 | 7.2k+ | 2.9k+ | / | / | / | 有较多名企(华为/360/有道/微博/京东/腾讯 等) | / |
| 项目发展情况 | 是否有发展规划/Roadmap | No | No | No | No | No | No | No |
| 项目发展情况 | 人员构成-主力开发 | 4 | 2人 (其中1人是咨询) | 1 (gin作者) | 10 | 7 | 4 | 1 |
| 项目发展情况 | contributor 数目 | 240 | 149 | 94 | 135 | 125 | 304 | 22 |
| 项目发展情况 | 是否有公司赞助/支持 | No | No | No | Yes (3) | No | No | No |
基于 Go 的 Web 框架调研的更多相关文章
- 实现基于netty的web框架,了解一下
上一篇写了,基于netty实现的rpc的微框架,其中详细介绍netty的原理及组件,这篇就不过多介绍 这篇实现基于netty的web框架,你说netty强不强,文中有不对的地方,欢迎大牛指正 先普及几 ...
- 基于 CSS 的 Web 框架 CJSS
CJSS 是一个基于 CSS 的 Web 框架,所有效果都在 CSS 文件中生效,可以在 CSS 中使用它添加更多功能,或者构建一个完整的页面. 使用方法: HTML 想要使用某个组件,在 CSS 文 ...
- Django视频教程 - 基于Python的Web框架(全13集)
Django是由Python驱动的开源模型-视图-控制器(MVC)风格的Web应用程序框架,使用Django可以在即可分钟内快速开发一个高品质易维护数据库驱动的应用程序.下面是一大坨关于Django应 ...
- 自定义mvc或mtv框架:基于wsgiref的web框架
把mvc或mtv框架的model数据库,view:html,control逻辑处理,url判别,wsgiref集中在一个文件 代码如下 #!/usr/bin/env python #-*- codin ...
- python_基于反射模拟Web框架路由系统
根据用户输入的内容,导入模块 #根据用户输入的内容,导入模块 inp = input("请输入模块名: ") print(inp,type(inp)) dd = __import_ ...
- 初识Flask——基于python的web框架
参考教程链接: https://dormousehole.readthedocs.io/en/latest/ (主要)https://www.w3cschool.cn/flask/ 目录: 1.写了一 ...
- 基于servlet实现一个web框架
servlet作为一个web规范.其本身就算做一个web开发框架,可是其web action (响应某个URI的实现)的实现都是基于类的,不是非常方便,而且3.0之前的版本号还必须通过web.xml配 ...
- [Python笔记]第十六篇:web框架之Tornado
Tornado是一个基于python的web框架,xxxxx 安装 python -m pip install tornado 第一个Tornado程序 安装完毕我们就可以新建一个app.py文件,放 ...
- python学习之路web框架
WEB框架的本质 python的WEB框架分为两大类: 1.自己写socket,自己处理请求 2.基于wsgi(Web Server Gateway Interface WEB服务网关接口),自己处理 ...
- ServiceFramework作为Java Web框架都有哪些不错的设计
前言 最近需要开发一个纯API的项目,mlsql-cluster,从无到有,到最后完整的proxy功能开发完毕,只花了四个小时不到,自己不尽小感叹了一把 ServiceFramework的高效. 关于 ...
随机推荐
- 抓包整理————ip 协议二[十三]
前言 介绍一下什么是nat协议和napt协议,和简单带一下LVS. 正文 什么是nat(Network Address Translation) 协议呢? 比如现在你家分配了一个ip,但是你家有10个 ...
- 分享一款嵌入式开源按键框架代码工程MultiButton
一.工程简介 MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块. Github地址:https://github.com/0x1abin/MultiButton 这个项目非常精简,只 ...
- kong管理界面konga的安装
kong网关自身的管理界面属于付费的应用,而第三方界面又非常少,konga算是相对比较好的一款了,虽然也有一些问题,但整体的功能还比较全,github仓库为:https://github.com/pa ...
- C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造
C++ 构造函数 构造函数是 C++ 中一种特殊的成员函数,当创建类对象时自动调用.它用于初始化对象的状态,例如为属性分配初始值.构造函数与类同名,且没有返回值类型. 构造函数类型 C++ 支持多种类 ...
- 剑指offer51(Java)-数组中的逆序对(困难)
题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例1: 输入: [7,5,6,4] 输出: 5 限制: 0 &l ...
- 蚂蚁一面:GC垃圾回收时,内存分配和回收策略有哪些?
文章首发于公众号:腐烂的橘子 蚂蚁面试主要为电话面试,期间也会要求使用编辑器手写算法题.作为一线互联网大厂,Java 基础知识是必备的,其中垃圾回收也是面试过程中的重中之重. Java 内存的自动管理 ...
- 有赞 Flink 实时任务资源优化探索与实践
简介: 目前有赞实时计算平台对于 Flink 任务资源优化探索已经走出第一步. 随着 Flink K8s 化以及实时集群迁移完成,有赞越来越多的 Flink 实时任务运行在 K8s 集群上,Flink ...
- ICBU可控文本生成技术详解
简介: 文本生成(Text Generation)是自然语言处理(Natural Language Processing,NLP)领域的一项重要且具有挑战的任务.顾名思义,文本生成任务的目的是生成近 ...
- dotnet core 3.1 将 UWP 控件嵌入到 WPF 应用 收到 UIA 消息主线程卡住
本文记录一个问题,此问题是在 .NET Core 3.1 的 WPF 应用里面,嵌入 UWP 控件之后,在收到 UIA 的消息时,可能让主线程卡住.暂时此问题还不知道具体的复现步骤,此问题预计和 WP ...
- SQL 多表关联更新语句
A表WHERE条件来自B表查询结果集 UPDATE a SET a.is_sync = 0 FROM A表 a LEFT JOIN B表 b ON a.order_id = b.order_id AN ...