Go新项目-为何选Gin框架?(0)

先说结论:我们选型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

选择Gin的几点说明:

  • 可以看到Gin的star数最多,只是一个指标,说明使用人多,然后社区人员活跃
  • 功能简单易用性强,可扩展空间大
  • 内部使用的路由是httprouter(性能非常好的路由框架).

当然这些不够,如何把轻框架即满足需求又容易扩展,还是要参考热门的开源项目,对该框架进行补充;如:Docker,Kubernetes,Hugo,awesome-go等

详细对比参考地址:https://github.com/speedwheel/awesome-go-web-frameworks/blob/master/README.md

附带一些Gin框架开发相关的辅助工具

  • 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
相关推荐
忒可君35 分钟前
C# winform 报错:类型“System.Int32”的对象无法转换为类型“System.Int16”。
java·开发语言
GuYue.bing1 小时前
网络下载ts流媒体
开发语言·python
StringerChen1 小时前
Qt ui提升窗口的头文件找不到
开发语言·qt
数据小爬虫@1 小时前
如何利用PHP爬虫获取速卖通(AliExpress)商品评论
开发语言·爬虫·php
java1234_小锋2 小时前
MyBatis如何处理延迟加载?
java·开发语言
FeboReigns2 小时前
C++简明教程(10)(初识类)
c语言·开发语言·c++
学前端的小朱2 小时前
处理字体图标、js、html及其他资源
开发语言·javascript·webpack·html·打包工具
摇光933 小时前
js高阶-async与事件循环
开发语言·javascript·事件循环·宏任务·微任务
沐泽Mu3 小时前
嵌入式学习-QT-Day09
开发语言·qt·学习
小猿_003 小时前
C语言实现顺序表详解
c语言·开发语言