GO主流开源框架
GO主流开源框架
Go 语言有着丰富的开源框架生态,涵盖了多种应用场景,如 Web 开发、数据库操作、微服务、日志处理等。以下是一些常见的 Go 框架及其典型作用场景:
1. Web 框架
- Gin:
- 作用:一个高性能的轻量级 Web 框架,基于
httprouter,提供类似于 Martini 的 API,但性能更优。 - 场景:适合构建 RESTful API 和中小型 Web 应用,尤其是对性能要求较高的应用。
- 特点:性能高、路由灵活、提供中间件支持。
- 官网: https://gin-gonic.com
- 作用:一个高性能的轻量级 Web 框架,基于
- 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
- 作用:扩展了 Go 标准库
- 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/
这些开源框架帮助开发者在不同场景中更高效地构建应用。根据具体项目需求选择合适的框架,可以大大提升开发效率和系统性能。
相关文章:
GO主流开源框架
GO主流开源框架 Go 语言有着丰富的开源框架生态,涵盖了多种应用场景,如 Web 开发、数据库操作、微服务、日志处理等。以下是一些常见的 Go 框架及其典型作用场景: 1. Web 框架 Gin: 作用:一个高性能的轻量级 Web 框架ÿ…...
LeetCode:2398. 预算内的最多机器人数目 双指针+单调队列,时间复杂度O(n)
2398. 预算内的最多机器人数目 today 2398. 预算内的最多机器人数目 题目描述 你有 n 个机器人,给你两个下标从0开始的整数数组 chargeTimes 和 runningCosts ,两者长度都为 n 。第 i 个机器人充电时间为 chargeTimes[i] 单位时间,花费 ru…...
oracle 插入date日期类型的数据、插入从表中查出的数据,使用表中的默认数据
date sysdate to_date 插入从表中查出的数据 方式一 方式二 或者指定列名称 下边这个案例的前提是指定列插入,如果不指定,则也是默认的...
物流系统打单软件 佳易王物流运单怎么打印教程
一、前言 物流系统打单软件 佳易王物流运单怎么打印教程 1、佳易王物流管理系统可同时打印物流单和标签 2、如果一台电脑上有多台打印机,软件可以设置物流或标签对应的打印机,系统自动识别打印机。 二、软件程序图文说明 1、上图为 物流单在空白单上打…...
二叉树计算
题目描述 给出一个二叉树,请由该二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。左子树表示该节点左侧叶子节点为根节点的一颗新树;右子树表示该节点右侧叶子节点为根节点的一颗新树。 输入描述 2行整数&#…...
Java并发执行举例
在Java中实现并发执行可以通过多种方式,最常见的方式包括使用线程、ExecutorService、ForkJoinPool等。以下是几种常用并发执行的示例: 1. 使用Thread类 这是Java中最基础的并发实现,通过创建一个继承自Thread的类或实现Runnable接口来定义…...
Java 基础知识九(网络编程)
UDP DatagramSocket:通讯的数据管道 -send 和receive方法 -(可选,多网卡)绑定一个IP和Port DatagramPacket -集装箱:封装数据 -地址标签:目的地IPPort package org.example.net;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.n…...
深入解析Go语言的类型方法、接口与反射
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 Go语言作为一门现代编程语言,以其简洁高效的特性受到广大开发者的喜爱。在本文中,我们将深入探讨Go语言中的类型方法、接口和反射机制。通过丰富的代码示例和详尽的解释,帮助您全面理解这些关键概念,并在实际…...
C#中线程池【异步】
在 WinForm 项目中,线程池中的线程主要用于执行异步和并发任务。当你调用某些异步方法或使用并行编程时,线程池中的线程就会被使用。 在以下场景中,线程池的线程会被使用: 使用场景 异步任务执行 当你使用 Task.Run() 或 TaskF…...
OpenAI 刚刚推出 o1 大模型!!突破LLM极限
北京时间 9 月 13 日午夜,OpenAI 正式发布了一系列全新的 AI 大模型,专门用于应对复杂问题。 这一新模型的出现代表了一个重要突破,其具备的复杂推理能力远远超过了以往用于科学、代码和数学等领域的通用模型,能够解决比之前更难的…...
【Vmware16安装教程】
📖Vmware16安装教程 ✅1.下载✅2.安装 ✅1.下载 官网地址:https://www.vmware.com/ 百度云盘:Vmware16下载 123云盘:Vmware16下载 ✅2.安装 1.双击安装包VMware-workstation-full-16.1.0-LinuxProbe.Com.exe,点击…...
Delphi5利用DLL实现窗体的重用
文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程,在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…...
使用JavaWeb开发注册功能时,校验用户名是否已存在的一个思路(附代码)
在开发 Web 应用程序时,用户注册是一个常见的功能。为了确保每个用户都有一个唯一的用户名,我们需要在用户注册时检查数据库中是否已经存在该用户名。本文将详细介绍如何在 Servlet 中使用 JDBC 技术来检查用户名是否存在。 1. JDBC 简介 Java Databas…...
前端常见面试-首页性能提升、项目优化
首页性能提升 Vue 首页性能提升是Vue应用开发中非常重要的一环,它直接影响用户体验和应用的加载速度。以下是一些关键的Vue首页性能提升策略: 1. 代码分割与懒加载 路由懒加载:利用Webpack的动态导入(import())特性…...
卷王阿里又开启价格战,大模型价格降价85%!
我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 9月19日,就是昨天,一年一度的云计算盛…...
Java中的异步编程模式:CompletableFuture与Reactive Programming的实战
Java中的异步编程模式:CompletableFuture与Reactive Programming的实战 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代Java开发中,异步编程已经成为提高应用性能和…...
7iDU AMP田岛绣花机驱动器维修0J2100400022
7iDU AMP神州田岛绣花机驱动器维修0J2101300000绣花机控制器等全系列型号均可处理。 田岛7iDU AMP是田岛绣花机中使用很广的一种5相驱动器,在田岛平绣车TMEF-H,TMFD中应用,在链条车TMCE112S,和盘带车TMLG中大量使用。其采用的东芝…...
部署自己的对话大模型,使用Ollama + Qwen2 +FastGPT 实现
部署资源 AUTODL 使用最小3080Ti 资源,cuda > 12.0使用云服务器,部署fastGPT oneAPI,M3E 模型 操作步骤 配置代理 export HF_ENDPOINThttps://hf-mirror.com下载qwen2模型 - 如何下载huggingface huggingface-cli download Qwen/Qwen2-…...
vue websocket 使用
基于webSocket通信的库主要有 socket.io,SockJS 关于SockJS的使用 先安装 sockjs-client 和 stompjs npm install sockjs-client npm install stompjs import SockJS from sockjs-client; import Stomp from stompjs; export default { data () { …...
Spring Boot 入门面试五道题
在准备Spring Boot面试时,从简单到困难设计面试题可以帮助你系统地复习和评估自己的掌握程度。以下是五个不同难度的Spring Boot面试题: 1. 简单题:什么是Spring Boot?它主要解决了什么问题? 答案: Sprin…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
