先说结论:我们选型Gin框架
早在大概在2019年下旬,由于内部一个多线程上传的需求,考虑到Go协程的优势;
内部采用Gin框架编写了内部的数据上传平台BAP,采用Gin+Vue开发,但前期没考虑到工程化思维,导致代码后期维护程度变得很复杂,硬编码内容过多,重复内容过多;
项目说明:其中一半采用Gin作为Web页面API,一半做了脚本独立运行。
此次鉴于新项目的开发,准备将代码工程化思维重构。
首先考虑到业务的增长,以后需要将公司项目朝着自动化运维、微服务、集群、分布式项目的方向发展,云原生的需求,底层部署会向Docker+Kubernetes方向靠拢
目前在行的PHP为主的项目就显得不那么友好(业务代码繁杂,开发环境依赖重,资源消耗占用大等),并且其中还嵌套了Python脚本。
这催生了我们选择go语言重构及开发新项目的打算:
go语言的优势如下:
- Go天生的自带并发调度,如协程和通道,且协程内存占用少,一个Goroutine栈空间最小2K
- Go自带的格式统一,gofmt工具
- Go语法的简洁,可读性强,严格语言规范
- Go作为静态语言,编译效率高,性能相对高
- Go跨平台的编译使用,跟操作shell命令一样的调用,部署方便,目前很多脚本都是这么来做的。
- 丰富的内置类型,内置强大的工具
- 内置runtime,自动垃圾回收机制
由于我们很多项目都是基于BS架构的模式,我们也不希望过重的框架,开发高性能的API服务以及后续的微服务,进行前后端分离开发模式(go+vue)
所以我们就要从go热门的几款框架中做了对比:
统计star时间:2021-12-15
- Beego: 一个Go语言下开源的,高性能Web框架 ;
- github:https://github.com/beego/beego, star 27.4k
- Buffalo: 一个Go语言下快速Web开发框架 ;
- github:https://github.com/gobuffalo/buffalo, star 6.5k
- Echo: 一个高性能,极简的Web框架;
- github:https://github.com/labstack/echo,21.3k
- Gin: 一个Go语言写的HTTP Web框架。它提供了Martini风格的API并有更好的性能;
- github:https://github.com/gin-gonic/gin, star 53.9k
- Revel: 一个高生产率,全栈Go语言的Web框架;
- github:https://github.com/revel/revel,star 12.5k
- Iris: 目前发展最快的Go Web框架。提供完整的MVC功能并且面向未来;
- github:https://github.com/kataras/iris,star 21.6k
选择Gin的几点说明:
- 可以看到Gin的star数最多,只是一个指标,说明使用人多,然后社区人员活跃
- 功能简单易用性强,可扩展空间大
- 内部使用的路由是httprouter(性能非常好的路由框架).
当然这些不够,如何把轻框架即满足需求又容易扩展,还是要参考热门的开源项目,对该框架进行补充;如:Docker,Kubernetes,Hugo,awesome-go等
详细对比参考地址:https://github.com/speedwheel/awesome-go-web-frameworks/blob/master/README.md文章来源:https://www.toymoban.com/news/detail-798221.html
附带一些Gin框架开发相关的辅助工具文章来源地址https://www.toymoban.com/news/detail-798221.html
- gin-swagger:通过注释自动生成swagger api文档
- gorm:ORM库旨在让开发人员更加友好
- cobra:A Commander for modern Go CLI interactions(现代Go CLI交互的命令行工具集)
- viper:Viper是Go应用程序的完整配置解决方案,toml,yaml等配置文件读取
- jwt-go 用于生成、解析JWT token
- aliyun-oss-go-sdk 阿里云OSS官方包,用于操作OSS(当然这块具体业务了,我们使用alisdk较多)
- excelize 读写Excel
到了这里,关于Go新项目-为何选Gin框架?(0)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!