MinIO 是一个高性能的分布式对象存储系统,兼容 Amazon S3 接口,适用于私有云、公有云和混合云环境。 项目地址: 🔗 GitHub:https://github.com/minio/minio 简介 MinIO 是用 Go 语言编写 的开源对象存储服务,它遵循 S3 API 协议,因此可以与大量现有工具无缝对接。 MinIO 的目标是成为云原生时代的 “现代对象存储解决方案”,广泛应用于 Kubernetes、数据湖、AI/ML 存储等场景。 特点 1. S3 兼容性 MinIO 完全兼容 Amazon S3 的 API,意味着你可以用 AWS 的 SDK 或工具(如 s3cmd, rclone, awscli)直接对接 MinIO,无需修改业务逻辑。 2. 高性能 读写速度非常快,甚至比 AWS S3 更快。 采用 SIMD、零拷贝、并发 IO 等优化手段。 3. 分布式部署 支持横向扩展,节点越多,容量越大、性能越高。 支持 erasure code 分布式容错 支持跨节点纠删码(Erasure Code) 多副本冗余、自动修复损坏数据 4. 部署简单 单个二进制文件.... 有更新! golang每日一库之MinIO golang每日一库
urfave/negroni 是一个轻量级的、可扩展的 Go 中间件库,专为构建 HTTP 服务而设计。 它的核心理念是中间件栈(Middleware Stack),可以像洋葱一样一层层包裹处理请求,非常适合构建具有清晰请求生命周期的 Web 应用或 API。 GitHub 地址:https://github.com/urfave/negroni 特点 中间件机制清晰简洁:支持多个中间件,按顺序执行 兼容 http.Handler 接口:能无缝接入标准库或其他框架(如 Gorilla Mux) 支持中间件链式调用和终止 自带常用中间件:Recovery、Logger、Static 等 极易扩展:只需实现 negroni.Handler 接口 安装 go get github.com/urfave/negroni 快速🌰 package main import ( "fmt" "net/http" "github.com/urfave/negroni" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/", func.... 有更新! golang每日一库之urfave/negroni golang每日一库
Zinx 是一个用 Go 语言编写的轻量级、并发 TCP 服务器框架,旨在帮助初学者深入理解 TCP 服务端开发的核心架构,同时具有生产级特性的模块化设计 。 设计理念 学习导向:源码精简,框架和教程同步开发,分版本迭代,一步步构建功能,降低学习门槛 。 生产适用:模块化、扩展性强,已被用于游戏服务器、长连接消息转发、Web 后端插件等。 快速上手 使用 Zinx 实现一个基本 TCP 服务仅需三步 : func main() { s := znet.NewServer() s.AddRouter(1, &PingRouter{}) s.Serve() } type PingRouter struct { znet.BaseRouter } func (r *PingRouter) Handle(req ziface.IRequest) { fmt.Println("recv:", string(req.GetData())) req.GetConnection().SendBuffMsg(0, []byte("ping...ping...")) } 这里简单给个例子,如果你.... 有更新! golang每日一库之Zinx golang每日一库
viant/toolbox 是一个由 Viant 开发的功能丰富的 Go 工具库,它集合了大量常用的实用工具函数,涵盖字符串、时间、反射、文件、HTTP、配置处理等多个方面,是“工具人”写项目时不可多得的瑞士军刀型库。 一句话总结 toolbox 是一个“啥都能干点”的 Go 通用工具库,适合需要各种小功能支持但又不想一一造轮子的开发者。 包结构 它的模块设计清晰,大致可以分为以下几个子包: 包名用途介绍 collection集合操作辅助,如 Set、LinkedList等 format格式化辅助,如模板渲染、SQL 拼接等 secret加解密相关(对称/非对称加密) storage抽象存储接口,支持本地和云存储(如 GCS) conversion类型转换工具 reader多种数据源读取能力(支持 CSV、JSON、INI 等) fileutil文件与目录操作 process外部进程启动与管理 shellShell 命令封装执行 urlURL 构建、解析等 reflect反射封装工具 data数据处理,如 Map/Struct 转换等 assert简易测试断言工具 httpHTTP 请.... 有更新! golang每日一库之工具库viant/toolbox golang每日一库
Freedom:自由不是乱来,而是架构有道 你是不是写 Go 写得挺开心的,直到有一天产品说: “这个业务流程以后会变、会拆、可能还会上天。” 于是你开始发愁: 怎么写才不会三个月后改到哭? 怎么解耦、怎么扩展、怎么不踩坑? 这时候,Freedom 跃马而来,大喊一句: “用我!让你写得自由、改得潇洒、跑得像风!” 什么是 Freedom Freedom 是一个 基于“领域驱动设计(DDD)+ 清晰分层架构” 的 Go Web 框架。它不搞花里胡哨的魔法,讲究的就是: 结构清晰,职责分明,稳定如老狗。 它有啥特别的 特性说明 基于 DDD(领域驱动设计)把业务逻辑写得像讲故事一样自然,结构清晰又高级 强分层架构Interface、Domain、Infra、Adapter…每层都像部队排好队 链路追踪神器内置中间件支持链路追踪,调 Bug 像上帝视角一样舒服 熔断限流自带 resilience 功能,服务顶不住也能优雅挂掉 中间件机制想挂日志就挂日志,想挂追踪就挂追踪,自己定义不求人 依赖注入机制解耦得干干净净,服务之间“你用我,但我不认识你” 分层图来一张 请求 -> Contr.... 有更新! golang每日一库之DDD框架freedom golang每日一库
你是不是曾经想用 Go 写个后台系统,结果一不小心就写成了 Bug 系统? 是不是写到权限控制的时候,感觉自己变成了权限受害者? 是不是本来想安安心心做个 CRUD 工人,结果被前端 UI 折磨到怀疑人生? 别怕,GoAdmin 来拯救你了! 什么是 GoAdmin 简单说,GoAdmin 就是 Go 语言界的“万能后台神器”。 它能帮你: 三分钟起飞:快速搭出一个后台系统; 一行不写也能 CRUD:直接配置表单、表格、搜索字段,页面自动蹦出来; 自带权限管理系统:你不需要再写那些 “if user.role == 超管” 了; 自带帅气界面:内置 AdminLTE,不丑,还挺潮; 还能当插件用:想挂在哪个框架上都行,Gin、Echo、Fiber、Beego,你说了算。 举个栗子 只要你写几行代码,把 GoAdmin 挂在你心爱的 Gin 路由上,然后配置一下数据库,后台系统就啪地一下出来了,快得很。 eng := engine.Default() eng.AddConfig(cfg).AddPlugins(admin.NewAdmin()).Use(router) 这不是代码,这是.... 有更新! golang每日一库之GoAdmin golang每日一库
Temporal 是一个开源的分布式工作流编排系统,旨在简化构建和运行可靠、可扩展的长时间运行的后端应用程序。 它最初是由 Uber 的 Cadence 系统演变而来,现在由 Temporal Technologies 公司主导开发。 目前已被 Coinbase、Netflix、Box、Snap 等大规模应用。 核心功能 1. 分布式工作流编排 Temporal 支持在多台机器上协调执行复杂的业务逻辑。工作流可以在失败、重启甚至升级后继续执行,不需要人工干预。 2. 持久性与容错 所有工作流状态会被持久化(通常使用 Cassandra、MySQL、PostgreSQL 等后端数据库)。这使得工作流可以在服务崩溃或网络中断时恢复执行。 3. 异步任务和重试机制 Temporal 提供强大的异步任务支持,以及自动的、可配置的重试逻辑。即使下游服务暂时不可用,也能自动重试直到成功或达到重试上限。 4. 幂等与去重 通过事件驱动和有序日志处理机制,Temporal 可以保证工作流执行的幂等性,防止重复执行任务。 5. 编程语言支持 支持多种语言 SDK: Go (temporalio/sdk-.... 有更新! golang每日一库之工作流引擎Temporal golang每日一库
Cadence 是由 Uber 开发并开源的分布式工作流编排引擎,旨在帮助开发者构建可扩展、可靠且具备容错能力的分布式应用程序。 特点 1. 容错的有状态工作流 Cadence 的工作流是“容错的有状态工作流”,即使在进程崩溃或服务重启的情况下,工作流的状态(包括局部变量、调用栈、定时器等)也能自动恢复,确保业务流程不中断。 2. 异步任务与自动重试 通过将业务逻辑拆分为工作流(Workflow)和活动(Activity),Cadence 支持异步任务执行,并内置自动重试机制,确保任务在失败后能够自动重试,提升系统的可靠性。 3. 多语言支持 官方提供 Go 和 Java 的 SDK,社区还支持 Python 和 Ruby,方便开发者根据自身技术栈选择合适的语言进行开发。这点确实很方便。 4. 可视化管理界面 Cadence 提供 Web UI,允许用户查看工作流的执行状态、历史记录,便于监控和调试。 亲测界面挺好看的。 认识组件 Cadence 的架构主要包括以下组件: Frontend Service:接收客户端请求,进行初步处理。 History Service:负责维护工作流的.... 有更新! golang每日一库之工作流引擎cadence golang每日一库
goflow 是一个基于 Go 语言的高性能、可扩展、分布式的工作流框架,由 GitHub 用户 s8sg 开发。它允许开发者以编程方式将分布式工作流定义为任务的有向无环图(DAG),并通过多个工作节点(Worker)均匀分配负载来执行任务。 核心特性 1. DAG 构建与任务编排 goflow 允许用户以 DAG 的形式定义工作流,每个节点代表一个任务,边表示任务之间的依赖关系。这种结构使得任务的执行顺序清晰,便于管理复杂的工作流程。 2. 分布式执行与负载均衡 任务可以分布在多个 Worker 上执行,goflow 通过均匀分配负载的方式,确保各个 Worker 的工作量平衡,从而提高整体执行效率。 3. 可扩展的服务架构 goflow 提供了 FlowService 结构体,允许用户配置服务的端口、Redis 地址、OpenTrace 地址、Worker 并发数等参数,便于根据实际需求进行扩展和调整。 4. 内置监控与可观测性 框架支持集成 OpenTracing,提供对工作流执行过程的监控和追踪功能,帮助开发者及时发现和解决问题。 5. Redis 支持 goflow 使用 R.... 有更新! golang每日一库之goflow golang每日一库
今天介绍一个工作流库。 Fastflow 是一个由 ShiningRush 开发的基于 Go 语言的轻量级、高性能分布式工作流框架。 它旨在解决复杂任务流的调度与执行问题,特别适用于如离线任务、Kubernetes 集群管理、容器迁移等场景。 特点 基于 DAG 的工作流模型 Fastflow 使用有向无环图(DAG)定义任务之间的依赖关系。每个节点(Task)代表一个操作,只有其所有依赖任务成功完成后,才会被触发执行。 高性能与并发执行 借助 Go 的协程和 channel 技术,Fastflow 能在单个实例上并行处理数百到数万个任务,满足高并发需求。 可观测性 集成 Prometheus,Fastflow 提供任务执行的实时指标,如并发任务数、任务分发时间等,便于监控和调试。 水平扩展与负载均衡 支持多实例部署,通过 Leader 选举机制实现节点间的负载均衡,确保系统在高负载下的稳定性。 易用的 API 与扩展性 提供开箱即用的 API,支持通过编程或 YAML 定义工作流。用户可以自定义任务行为(Action),并根据上下文决定是否跳过任务。 轻量级集成 作为基础框架,Fas.... 有更新! golang每日一库之fastflow golang每日一库
go-workflow 是一个基于 Go 语言开发的超轻量级工作流引擎,设计灵感来源于 Java 的 Activiti,但进行了深度简化和解耦,特别适用于微服务架构下的流程控制需求。 特点 微服务架构友好:go-workflow 仅关注流程流转逻辑,完全解耦用户、组织等业务数据,便于与各类系统集成。 JSON 流程定义:采用 JSON 数组替代传统的 BPMN 模型,简化流程配置,灵感来源于钉钉 OA 系统。 轻量高效:相比 Activiti 更加精简,部署简单,运行效率高,适合中小型企业或对流程控制有定制需求的场景。 前后端分离:提供独立的前端流程设计器 go-workflow-UI,支持可视化流程配置。 表结构 go-workflow 使用多张表来管理流程定义、实例、任务等核心数据: procdef:流程定义表,存储流程名称、版本、JSON 配置等信息。 proc_inst:流程实例表,记录每次流程启动的实例信息,如当前节点、审批人等。 execution:执行流表,保存流程的执行路径,确保流程按预定顺序流转。 task:任务表,记录每个节点的任务详情,包括审批人、审批状态等。 i.... 有更新! golang每日一库之go-workflow golang每日一库
go-redislock 是一个由 jefferyjob 开发的 Go 语言库,用于在分布式环境中实现基于 Redis 的高性能分布式锁。它提供了可靠的并发控制机制,确保多个节点在访问共享资源时的数据一致性和资源互斥。 核心特性 高性能:利用 Redis 的内存存储特性,实现快速的锁获取与释放。 超时机制:支持设置锁的过期时间,防止死锁。 可重入性:允许同一线程多次获取同一把锁。 自动续期:在长时间任务执行期间,自动延长锁的有效期。 手动续期:提供手动延长锁有效期的方法,满足特定需求。 灵活的锁释放方式:支持手动释放锁,确保资源的及时释放。 安装 使用以下命令安装 go-redislock: go get -u github.com/jefferyjob/go-redislock 示例 package main import ( "context" "fmt" redislock "github.com/jefferyjob/go-redislock" "github.com/redis/go-redis/v9" ) func main() { // 创建 Redis 客户端 red.... 有更新! golang每日一库之jefferyjob/go-redislock golang每日一库
bsm/redislock 是一个用于 在 Go 语言中实现基于 Redis 的分布式锁(distributed lock) 的开源库,由 bsm 组织开发和维护。 它实现了基于 Redis 的 SET NX PX 命令模式的分布式锁,兼容 Redlock 算法的核心思想,但更简单和轻量。 简介 基于 Redis 单实例实现分布式锁 遵循 Redis 官方推荐的 SET resource-name value NX PX max-lock-time 模式 简洁、高性能、线程安全 支持锁自动过期 支持锁续约(可选) 没有依赖复杂的 Redlock 多主节点算法,更适合大多数实际应用 安装方法 go get github.com/bsm/redislock 示例 import ( "context" "fmt" "log" "time" "github.com/bsm/redislock" "github.com/redis/go-redis/v9" ) func main() { // Connect to redis. client := redis.NewClient(&r.... 有更新! golang每日一库之bsm/redislock golang每日一库
http.DefaultTransport 容易导致连接耗尽的原因,主要与它的连接复用和池管理机制有关。具体来说,http.DefaultTransport 使用的是 http.Transport,而 http.Transport 在默认情况下有一些特定的行为,可能会在高并发请求时导致连接数达到上限,从而造成连接耗尽。以下是一些关键原因: 1. 连接池复用不够智能 http.Transport 默认会为每个主机(host)保持一个连接池,用于复用连接,避免每次请求都重新建立连接。然而,默认的连接池并没有很强的智能管理。尤其在大量并发请求时,http.Transport 可能会维持大量的空闲连接,而这些连接并未被及时关闭或复用,导致连接数不断积累。 默认情况下,http.Transport 的连接池设置是固定的,不会随着并发量的增加自动扩展。 连接池内的连接在空闲时如果没有被及时清理,会在一定时间后仍然占用资源。 2. 最大空闲连接数限制 http.Transport 有 MaxIdleConns 和 MaxIdleConnsPerHost 两个配置,分别控制全局最大空闲连接数和每个主机.... 有更新! 为什么http.DefaultTransport 容易导致连接耗尽 待分类
gconv 是一个 Go 语言的库,提供了一套高效且灵活的工具来简化不同数据类型之间的转换。 它来自于 gf(GoFrame)框架的一部分,专注于数据转换任务,特别是从 map、JSON、struct、slice、array 等常见数据类型之间进行转换。 这个库的核心优势是它通过类型断言机制使得类型转换变得非常简洁且高效,极大地减少了手动编写冗长代码的需求。 核心功能 1. 类型转换 gconv 提供了多种数据类型转换的支持,包括但不限于: 基本数据类型(如 int、float64、string)之间的转换。 结构体与 map 之间的相互转换。 结构体与 JSON 的相互转换。 切片与数组 之间的转换。 其他自定义类型 与基础类型之间的转换。 package main import ( "fmt" "github.com/gogf/gf/v2/util/gconv" ) func main() { i := 123 fmt.Printf("%10s %v\n", "Int:", gconv.Int(i)) fmt.Printf("%10s %v\n", "Int8:", gconv.I.... 有更新! golang每日一库之gconv golang每日一库
一、简介 safetext 是 Google 开源的安全增强型 Go 语言模板处理库,旨在防范 YAML 注入和 Shell 命令注入攻击。它直接替代 Go 标准库的 text/template,通过严格的输入验证机制,阻断攻击者通过模板参数发起的恶意注入行为。 二、防范漏洞 YAML 注入攻击当模板参数由攻击者控制时,若使用标准库的 text/template 处理 YAML 模板,攻击者可能通过换行符等特殊字符篡改文档结构(如覆盖敏感字段)。例如: sensitive: data innocent: "{{ .input}}" # 攻击者输入可注入换行符破坏结构 safetext 会在检测到此类注入时立即返回 YAML Injection Detected 错误,阻止恶意操作。 Shell 命令注入 在拼接 Shell 命令时,传统方法(如 fmt.Sprintf)存在参数逃逸风险。例如: result := fmt.Sprintf("git commit -m %s", message) // 若 message 含 `rm -rf /` 等命令 使用 safetext 提供.... 有更新! golang每日一库之safetext golang每日一库
go-pinyin 汉字转拼音库 go-pinyin 是一个用于将汉字转换为拼音的 Golang 库,提供多种模式,支持带音调、无音调、首字母提取等功能。该库适用于拼音搜索、汉字排序、文本转换等场景。 安装 使用 go get 下载安装: go get -u github.com/mozillazg/go-pinyin 基本用法 package main import ( "fmt" "github.com/mozillazg/go-pinyin" ) func main() { hans := "汉字转拼音" py := pinyin.Pinyin(hans, pinyin.NewArgs()) fmt.Println(py) // 输出: [[han] [zi] [zhuan] [pin] [yin]] } 默认情况下,Pinyin 方法会返回每个汉字的拼音,采用无音调的格式。 模式选项 go-pinyin 提供了多种模式,用户可以通过 pinyin.Args 结构体参数进行配置。 1. 带音调的拼音 args := pinyin.NewArgs() args.Style = .... 有更新! golang每日一库之go-pinyin golang每日一库
作为一个 HTML 解析库,PuerkitoBio/goquery 凭借类 jQuery 的语法设计,改变了开发者处理网页数据的姿势。本文将剖析其核心特性,并通过 实用案例展示该库的用法。 一、架构解析 1.1 底层技术栈 • 基于 net/html 标准库实现 DOM 解析 • 集成 cascadia CSS 选择器引擎(支持 CSS3 选择器) • 内存友好型设计,单节点内存消耗仅 0.5KB 1.2 性能 操作类型GoQuery正则解析BeautifulSoup 解析 1MB HTML12ms45ms210ms 10k 次选择器0.8s3.2s5.6s 内存占用峰值35MB120MB280MB 二、环境配置与基础用法 2.1 安装命令 go get github.com/PuerkitoBio/goquery 2.2 文档加载方式 // 从网络加载 doc, err := goquery.NewDocumentFromReader(res.Body) // 从字符串加载 html := `<html><body>Hello</body><.... 有更新! golang每日一库之goquery golang每日一库
Go语言的 encoding/json 是标准库中用于处理 JSON 数据的核心模块,支持高效序列化(Marshal)与反序列化(Unmarshal)操作。以下从核心功能、使用技巧、性能优化及场景实践四个维度展开详细说明。 一、核心功能与基础用法 数据绑定原理通过结构体标签(Tag)实现 JSON 键与 Go 结构体字段的映射: type User struct { Name string `json:"name"` // 字段重命名 Age int `json:"age,omitempty"` // 空值忽略 Roles []Role `json:"roles"` // 嵌套结构 } 标签语法支持 omitempty(零值忽略)、string(数字转字符串)等扩展参数。 序列化与反序列化 • Marshal:结构体 → JSON user := User{Name: "Alice", Age: 25} jsonData, _ := json.Marshal(user) // 输出:{"name":"Alice","age":25} • Unmarshal:JSON → 结构体 j.... 有更新! golang基础之encoding/json解读 golang基础