GO主流开源框架

ops/2024/9/20 8:06:53/ 标签: golang, 开源, 开发语言

GO主流开源框架

Go 语言有着丰富的开源框架生态,涵盖了多种应用场景,如 Web 开发、数据库操作、微服务、日志处理等。以下是一些常见的 Go 框架及其典型作用场景:

1. Web 框架

  • Gin:
    • 作用:一个高性能的轻量级 Web 框架,基于 httprouter,提供类似于 Martini 的 API,但性能更优。
    • 场景:适合构建 RESTful API 和中小型 Web 应用,尤其是对性能要求较高的应用。
    • 特点:性能高、路由灵活、提供中间件支持。
    • 官网: https://gin-gonic.com
  • Echo:
    • 作用:功能强大的 Web 框架,强调极简 API、性能和生产级功能。
    • 场景:构建 RESTful API 和快速开发企业级 Web 应用。
    • 特点:易用性强,内置丰富的功能如验证、错误处理等。
    • 官网: https://echo.labstack.com
  • Iris:
    • 作用:一个快速、简单的 Web 框架,支持高效的 MVC 结构。
    • 场景:适合大型 Web 项目,提供了大量的开发工具和模板引擎支持。
    • 特点:完整的 MVC 支持、支持实时功能和 WebSocket。
    • 官网: https://www.iris-go.com
  • Fiber:
    • 作用:基于 fasthttp 构建的高性能 Web 框架,模仿了 Express.js 的设计。
    • 场景:适合需要快速开发和高性能需求的 Web 应用,尤其是从 Node.js 迁移过来的开发者。
    • 特点:性能极高、API 简单、易上手。
    • 官网: https://gofiber.io

2. 数据库操作框架

  • GORM:
    • 作用:Go 语言中最流行的 ORM 框架,提供对数据库的对象关系映射支持。
    • 场景:适合需要操作关系型数据库(如 MySQL、PostgreSQL 等)的应用,尤其是那些希望简化数据库操作的项目。
    • 特点:易用、支持事务、关联、批量插入和迁移。
    • 官网: https://gorm.io
  • SQLx:
    • 作用:扩展了 Go 标准库 database/sql,提供更强大的 SQL 查询和扫描支持。
    • 场景:适合需要更灵活控制 SQL 语句,而不需要复杂 ORM 特性的时候。
    • 特点:提供命名查询、结构体扫描等功能,性能较好。
    • 官网: https://github.com/jmoiron/sqlx
  • Xorm:
    • 作用:另一个常见的 ORM 框架,提供了简单易用的数据库操作功能。
    • 场景:类似 GORM,用于需要简化数据库操作的项目。
    • 特点:性能较好,支持多数据库引擎。
    • 官网: https://xorm.io

3. 微服务框架

  • Go Micro:
    • 作用:功能强大的微服务框架,提供构建、发布、发现、通信等微服务相关功能。
    • 场景:适合构建分布式系统和微服务架构的应用,支持服务发现、负载均衡、消息通信等功能。
    • 特点:组件丰富,支持 RPC、gRPC、事件驱动等。
    • 官网: https://go-micro.dev
  • Grpc-Go:
    • 作用:gRPC 的官方 Go 语言实现,用于高性能 RPC 调用,支持 HTTP/2 和 ProtoBuf。
    • 场景:适合构建高性能的微服务,尤其是需要跨语言通信的场景。
    • 特点:高效的序列化和通信,支持流式处理、负载均衡等。
    • 官网: https://grpc.io
  • Kit:
    • 作用:轻量级微服务工具包,提供了构建微服务的核心组件,特别关注微服务的基础设施。
    • 场景:适合构建可观测性好、基础设施完善的微服务系统。
    • 特点:强大、灵活,提供服务发现、日志、监控等功能。
    • 官网: https://gokit.io

4. 任务调度与队列

  • Go-Workqueue:
    • 作用:基于 worker 线程池的任务队列处理框架。
    • 场景:适合需要异步任务调度和并发任务处理的系统。
    • 特点:简单易用,支持并发任务处理,扩展性好。
  • Asynq:
    • 作用:基于 Redis 的异步任务队列,类似于 Python 中的 Celery。
    • 场景:适合需要调度大量任务或有复杂任务依赖的应用场景。
    • 特点:支持任务重试、延迟任务、任务优先级等功能。
    • 官网: https://github.com/hibiken/asynq

5. 日志框架

  • Logrus:
    • 作用:一个结构化的日志记录库,提供了丰富的日志格式和 hook 支持。
    • 场景:适合构建大型系统中需要灵活、结构化日志输出的应用。
    • 特点:支持多种日志格式,如 JSON、文本,插件化结构易扩展。
    • 官网: https://github.com/sirupsen/logrus
  • Zap:
    • 作用:高性能的日志库,强调性能和灵活性,提供结构化和非结构化日志支持。
    • 场景:适合对性能要求极高的应用,如高并发服务。
    • 特点:性能极高,支持结构化日志。
    • 官网: https://github.com/uber-go/zap
  • Glog:
    • 作用:Google 出品的日志库,提供简单而高效的日志记录方式。
    • 场景:适合需要日志级别控制和大规模分布式系统日志的应用。
    • 特点:支持多种日志级别、自动归档。
    • 官网: https://github.com/golang/glog

6. 测试框架

  • Testify:
    • 作用:一个常用的 Go 语言测试库,提供断言、mock 和单元测试工具。
    • 场景:适合在开发过程中为应用编写单元测试和集成测试。
    • 特点:断言功能丰富,mock 支持强大。
    • 官网: https://github.com/stretchr/testify
  • Ginkgo:
    • 作用:BDD 风格的测试框架,提供了直观的测试流程和语法。
    • 场景:适合使用行为驱动开发(BDD)进行测试的项目。
    • 特点:支持并行测试、丰富的语法和测试报告功能。
    • 官网: https://onsi.github.io/ginkgo/

这些开源框架帮助开发者在不同场景中更高效地构建应用。根据具体项目需求选择合适的框架,可以大大提升开发效率和系统性能。


http://www.ppmy.cn/ops/113314.html

相关文章

今天不写项目,聊聊后端面试吧

首先感谢大家之前的观看呀~兄弟们~ 这边把我去过几家公司面试的题目都写一下哈,像我大二下,就是前两个月7-9进了公司进行后端实习,哎.....反正就是学学学..话不多说~ 1.Frist 1.HashMap实现原理 HashMap是基于哈希表的Map接口的非同步实现…

网站在线客服插件配置

使用工具:百度爱番番 下载地址: 百度爱番番—企业的一站式智能营销管家 一、下载百度爱番番APP,注册账号 二、 登录app 三、点击设置——站点设置——新建站点 四、设置站点名称——站点地址——PC站点——确定 五、点击配置好的站点的获取代…

leetcode73矩阵置零

思路 想到的就是需要一个数组来记录是不是这行或者这列是不是有零,然后最后再扫描一遍这个矩阵 题解 借助第0行第0列来记录这个行是不是有0,这个列是不是有0 另外,这个矩阵不大,所以可能有重复的置0应该也没事。 class Soluti…

力扣232:用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头…

签署《AI安全国际对话威尼斯共识》 智源持续推动人工智能安全发展

近日,由AI安全国际论坛(Safe AI Forum)和博古睿研究院(Berggruen Institute) 共同举办的第三届国际AI安全对话(International Dialogues on AI Safety)在威尼斯举办。图灵奖得主Yoshua Bengio、姚期智教授&…

一、编译原理(引论)

目录 【一】、引论 一、编译器 1、编译器 2、编译器与解释器 3、编译器结构 【一】、引论 一、编译器 1、编译器 (1)编译器:将人类易懂的 高级语言 翻译成 硬件可执行的目标机器语言 (2) 高级语言 ⚫ 直接面…

聊一聊测试用例的重要性

对于测试从业人员,测试用例术语应该不会陌生,在工作中用到的概率就像医生的药方,厨师心中的菜配方等等。 不过前者对项目组内人员都是公开的,后者的药方和配方大概率不会公开;前者项目内公开为了让测试用例覆盖率更高…

网络安全(黑客技术)2024年三个月自学计划

🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”…

如何为子域名配置 Nginx 反向代理到 Flask 应用

在这篇博客中,我将介绍如何为你的域名添加子域名,并使用 Nginx 反向代理将子域名请求转发到 Flask 应用。我们将以子域名 app1.example.com 为例,并通过 Nginx 将请求转发到 Flask 应用的 5000 端口。 1. 前提条件 你已经拥有一个域名&…

向日葵好用吗?4款稳定的远程控制软件推荐。

远程控制技术现在已经被应用于很多个领域,像企业办公,远程协助,智能家居,工业控制等等。我们常常会用到的时前两种。而实现远程控制的方式也有多种,但是最方便高效的还是使用第三方软件。我最常使用的是向日葵&#xf…

Flutter - Win32程序是如何执行main函数

Win32程序的主体结构 int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,_In_ wchar_t *command_line, _In_ int show_command) {// Attach to console when present (e.g., flutter run) or create a// new console when running with a debugger.if …

Linux 防火墙:Firewalld 常用命令行操作命令

firewalld命令行操作管理 按增删改查分类,前面加上 firewall-cmd : ### 查询操作--get-default-zone 查看当前默认区域 --get-zones 查看所有可用的区域 --get-active-zones …

科技赋能司法:易保全如何重塑法律文书签署与庭审流程

在这个数字化飞速发展的时代,司法领域也迎来了前所未有的变革。随着人工智能、区块链与互联网技术的深度融合,正以前所未有的力量变革着司法服务的格局。 易保全通过将“区块链人工智能互联网司法”相融合,推动公证系统逐步迈向智能化、高效…

C++学习笔记 —— 内存分配 new

//创建数值 int *pi new int; //pi指向动态分配的,未初始化的无名对象 delete pi; int *pi new int(10); //pi指向动态分配的,初始化10 delete pi;//创建数组 int *a new int[5]; //创建一个数组,未初始化数值 delete []a; // new 和 de…

二叉树进阶--AVL树

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 二叉树进阶--AVL树 收录于专栏 [C进阶学习] 本专栏旨在分享学习C的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 前提提示: 1 AVL树的…

Leetcode Hot 100刷题记录 -Day17(搜索二维矩阵II)

搜索二维矩阵II 问题描述: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,…

win/mac常用命令

这里写目录标题 windows(powershell)mac windows(powershell) Get-ChildItem | ForEach-Object { $_.Name }:打印当前目录中所有文件的名字Get-ChildItem | ForEach-Object { $_.Name } > file_list.txt&#xff1…

防火墙--NAT技术,基于源NAT,NAT服务器,双向NAT

文章目录 防火墙--NAT技术一、基于源NAT**方式**:NAT No-PATNAPT出接口地址方式Smart NAT三元组 NAT 二、基于服务器的NAT多出口场景下的NAT Server 三、双向NAT 防火墙–NAT技术 基于源NAT:用于将内部网络的私有IP地址转换为公共IP地址,以便…

Python | Leetcode Python题解之第419题棋盘上的战舰

题目: 题解: class Solution:def countBattleships(self, board: List[List[str]]) -> int:return sum(ch X and not (i > 0 and board[i - 1][j] X or j > 0 and board[i][j - 1] X)for i, row in enumerate(board) for j, ch in enumerat…

安卓沉浸式状态栏遇到的问题

1.顶部状态栏黑条问题 解决方案①:   在Activuty的onCreate方法中设置如下代码。 WindowManager.LayoutParams lp getWindow().getAttributes();if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {lp.layoutInDisplayCutoutMode WindowManager.LayoutPar…