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

  • 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

附带一些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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413042.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】栈的远房亲戚——队列

队列的基本概念 前言一、队列的定义二、队列的重要术语三、队列的基本操作四、数据结构的三要素4.1 线性表的三要素4.2 栈的三要素4.3 队列的三要素 结语 前言 大家好,很高兴又和大家见面啦!!! 在经过前面内容的介绍,…

享元模式介绍

目录 一、享元模式介绍 1.1 享元模式定义 1.2 享元模式原理 1.2.1 享元模式类图 1.2.2 模式角色说明 1.2.3 示例代码 二、享元模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 类图 2.2.2 具体实现 2.2.2.1 抽象享元类 2.2.2.2 共享享元类-白色棋子 2.2.2.3 共享享元…

Qt/QML编程之路:OpenGL的示例(39)

Qt编程之后,会发现有版本问题,有时候一个示例不同的版本下可能会跑不同,有些Qt5跑不同Qt6已经完善,可以跑通。 我就看到有个关于OpenGL的示例: 这个示例是演示怎么基于OpenGL编程的,但是调试时却发现glVie…

你知道怎么做好接口测试?

前言 谈起软件测试,就不得不说一下接口测试,凡是有功能的软件都离不开接口,没有接口的软件只是一个模具或页面,不具备任何功能。 什么是接口 业内常说的接口一般指两种: API:应用程序编程接口&#xff0c…

hub汉语有轮毂的意思吗?

问题描述:hub汉语有轮毂的意思吗? 问题解答: 是的,"hub"(中文翻译为"轮毂")是指机械装置中的一个中心部分,通常用于连接或支持其他部分。在车辆的轮胎系统中,…

npm依赖库备份

常用命令 设置默认使用本地缓存安装Nodejs时会自动安装npm,但是局路径是C:\Users\Caffrey\AppData\Roaming\npm默认的缓存路径是C:\Users\Caffrey\AppData\Roaming\npm-cache;查看npm的prefix和cache路径配置信息设置路径 设置默认使用本地缓存 npm con…

使用nginx搭建网页

一、基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! 具体配置 #下载nginx [rootoula1 ~]# yum install nginx -y #关闭防火墙 1、[rootoula1 ~]# systemctl stop firewalld 2、[rootoula1 ~]# setenforce 0#修改配置文件 [ro…

C++--默认参数

一.默认参数🍗 C中允许函数提供默认参数,也就是允许在函数的声明或定义时给⼀个或多个参数指定默认值。在调 ⽤具有默认参数的函数时,如果没有提供实际参数,C将⾃动把默认参数作为相应参数的值。 二.使用规则🍗 1.如果…

Halcon基于形状的模板匹配

Halcon基于形状的模板匹配 基于形状的模板匹配,也称为基于边缘方向梯度的匹配,是一种最常用也最前沿的模板匹配算法。该算法以物体边缘的梯度相关性作为匹配标准,原理是提取ROI中的边缘特征,结合灰度信息创建模板,并根…

Linux之引导和服务篇

系统引导是操作系统运行的开始,在用户能够正常登录之前,Linux的引导过程完成了一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。 一. 引导过程 开机自检--->MBR引导--->GRUB菜单--->加载Linux内核-…

【动态规划】【离线查询】【前缀和】689. 三个无重叠子数组的最大和

作者推荐 【动态规划】【数学】【C算法】18赛车 本文涉及的基础知识点 动态规划 滚动向量 离线查询 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode689. 三个无重叠子数组的最大和 给你一个整数数组 nums 和一个整数 k &…

ELK之Filebeat安装配置及日志抓取

一、Filebeat是什么 轻量型日志采集器 无论您是从安全设备、云、容器、主机还是 OT 进行数据收集,Filebeat 都将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂。 Filebeat 随附可观测性和安全数据源模块,这些模块简化了常见格式的日志的收集、解…