Golang 之 Web 框架调研

本文是关于 golang Web 框架信息的学习和汇总;

valyala/fasthttpvalyala/fasthttpjulienschmidt/httprouter/hellohello worldvalyala/fasthttpnet/httpvalyala/fasthttpnet/http

是一个高效的 Go 语言 full-stack Web 开发框架,其思路完全来自 Java 的 Play Framework ;

特点:

  • 热编译
  • 简单可选
  • 同步(每个请求都创建自己的 goroutine 来处理)

beego 是一个用 Go 开发的应用框架,思路来自于 tornado ,路由设计来源于 Sinatra ,作者是 build-web-application-with-golang 电子书的作者;

支持如下特性:

  • MVC
  • REST
  • 智能路由
  • 日志调试
  • 配置管理
  • 模板自动渲染
  • layout 设计
  • 中间件插入逻辑
  • 方便的 JSON/XML 服务

Golanger 是一个轻量级的 Web 应用框架,使用 Go 语言编写。

net/http

Golanger 约定的命名规则:

国人开发的 Go web MVC 框架,仿照 ASP.NET MVC ,简单而且强大。

基本功能:

  • mvc (Lightweight model)
  • 路由
  • 多模板引擎和布局
  • 简单数据库 API
  • 表单验证
  • 控制器或 Action 的过滤
  • 中间件
  • 最早的 Go 语言 Web 框架,借鉴的 java 和 scala 语言的 play 框架的很多想法;
  • 带有和 play 一样的毛病,舍弃了原有的标准完全自己来;revel 完全不理 Go 标准库的一套,全部是自己的概念;
  • 国内最火热的、比较中型的框架;
  • 除了基础的 MVC 结构外,还带有 Cache ,ORM ,Session 等多个库的支持;
  • 用的人很多,文档也很齐全(更新不太及时),社区和 Q 群也很活跃;

英文原文:这里

This suite aims to compare the public API of varIoUs Go web frameworks and routers.

本文从 COMmunitY 和 BEST FEATURE 两个方面对如下 web 框架进行了比较:

net/http

此文是 jochasinga/requests 作者用于说明为何不要使用框架的战斗檄文;有助于从相反的角度审视一下框架使用问题;

推荐阅读!

Checklist for (Not) Using a Framework

Frameworks are especially tempting for newcomers considering most of the time they have a task and/or requirements to work on and not just an interest and time to invest in Go. Here is a simple checklist for you to run down before you consider using a framework:

  • You understand interfaces in Go thoroughly like @rob_pike does.
  • You understand context thoroughly or want to deal with it instead of responses and requests.
  • You intend to build a simple REST web service which might only handle JSON tasks of which a framework makes simple.
  • You work alone or it is unlikely someone will work on your code in the future.
  • You do not often consult online docs and resources when programming.
  • You do not intend to use other packages outside of a framework’s functionalities.

If most of your answers are false,then

Stick to the bare Metal until you don’t have to.

net/http

本文给出了如何返回 JSON,XML 数据,以及如何渲染模板内容等问题的代码示例程序。