因为go的标准库net/http功能非常全,所以关于go语言的框架使用有三种观点:
-
不用框架:
因为go的标准库net/http功能非常全。只需要用一个完成路由和路由参数的库,加上海量的能满足任何需求(比如session什么的)的中间件就行了。目的是代码里始终使用net/http,保持最大的兼容性。不需要为了符合框架去写一些奇怪的shim程序。
-
轻量级框架:
因为内置了一些功能,而且不需要手写net/http,开发效率比较高。感觉如果只需要实现api,微服务等,使用轻量级框架比较合适。
-
全功能框架:
类似Ruby的ROR或python的Django。功能全,有方便的开发,部署工具。感觉适合用来做前后端不分离的网站项目。做cms感觉也合适。
候选列表:
优点:
- 包含web开发常用的各种功能和工具,能提高开发效率,减少代码维护成本。
- 不需要自己找需要的包和工具。
- 不用研究怎么使用第三方包和工具。
- 国人开发,有中文文档
缺点:
- 性能比轻量级框架低
- 请求处理函数,中间件函数都必须按框架规定的方式写。与go的标准库不一样。导致不容易扩展和调整。
- 无法优选需要的组件
这类框架以beego为代表,如果选这类的,推荐beego。
候选列表:
优点:
- 性能极高
- 扩展性好
- 可以优选需要的组件
缺点:
- 框架没有的功能需要自己选
- 维护成本比全功能的高点
这类框架的代表主要是gin和echo,根据 https://github.com/diyan/go-web-framework-comparsion 里的比较情况,echo的请求处理函数是强类型,支持中间件,支持统一的错误处理等因素。性能上两者差不多,echo好像更高点。推荐echo。