excelize 是一个用于处理 Excel 文件的 Go 语言库,支持读取、修改和创建 .xlsx 文件。它是一个非常流行的 Go 语言库,特别适用于需要操作 Excel 表格的 Go 开发者。这个库的功能丰富,支持大量的 Excel 特性,甚至可以操作图表、样式、单元格合并等。 xuri/excelize/v2 的基本特性: xuri/excelize/v2 是 excelize 库的最新版本(v2)。相较于 v1,v2 引入了一些增强和优化,主要特点如下: 1. 创建与读取 Excel 文件 创建新的 Excel 文件:你可以轻松创建新的工作簿和工作表,并填充数据。 读取现有的 Excel 文件:读取并操作已存在的 .xlsx 文件,允许你访问、修改单元格内容、格式等。 2. 支持工作簿和工作表 支持一个工作簿(workbook)包含多个工作表(worksheet)。 你可以选择读取、修改、删除工作表,或者创建新的工作表。 3. 单元格操作 读取单元格:可以读取特定单元格的值。 写入单元格:可以写入不同类型的数据到单元格。 支持常见数据类型,如字符串、数字、日期、布尔值等。 支持.... golang每日一库之xuri/excelize golang每日一库
spf13/cast 是一个轻量级的 Go 语言库,旨在简化类型转换的过程,特别是在处理不同类型数据时,能让类型转换变得更加简单和安全。这个库通过实现一些辅助函数来避免手动转换过程中的繁琐操作,从而使代码更加简洁。 安装 你可以通过以下命令安装 spf13/cast 库: go get github.com/spf13/cast 主要功能 cast 提供了一些常用的函数,用于将一种类型的数据转换为另一种类型。它特别适用于以下场景: 将字符串转换为其他基础类型(如 int, float64, bool 等)。 将接口(interface{})类型的数据转换为具体类型。 将一个结构体或复杂数据类型转换为其他类型。 常见函数 1. ToBool:转换为布尔值 将值转换为 bool 类型。如果转换失败,返回 false。 package main import ( "fmt" "github.com/spf13/cast" ) func main() { // 将字符串转换为布尔值 fmt.Println(cast.ToBool("true")) // 输出: true fmt.Printl.... golang每日一库之spf13/cast golang每日一库
IBM/sarama 是一个用于 Go 编程语言的 Kafka 客户端库。它是一个非常流行的库,用于与 Apache Kafka 进行交互,支持 Kafka 的生产者、消费者以及其他各种与 Kafka 相关的操作。Kafka 是一个分布式流平台,广泛用于构建实时数据流管道和流应用程序。 核心功能 IBM/sarama 提供了 Kafka 的各类功能支持,包括但不限于: Kafka 生产者: 使用 Kafka 生产者 API 向 Kafka 主题发送消息。你可以使用同步或异步的方式发送消息。 Kafka 消费者: 作为消费者,你可以订阅一个或多个 Kafka 主题并实时接收消息。它支持自动提交、手动提交等多种方式。 Kafka 集群管理: sarama 支持与 Kafka 集群的连接,允许你查询集群状态、管理分区等。 消息序列化与反序列化: 支持使用 JSON、Avro 或其他自定义方式来序列化和反序列化消息。 高可用性和容错: 支持 Kafka 的各种高级特性,如生产者的重试机制、消费者的自动和手动偏移量提交等。 批量消息处理: 可以将多条消息批量发送到 Kafka,以提高性能。 压缩.... golang每日一库之IBM/sarama golang每日一库
DATA-DOG/go-sqlmock 是一个用于 Go 语言的模拟数据库库,旨在帮助开发者在单元测试中模拟和测试 SQL 查询,而无需连接实际的数据库。它允许开发者模拟与数据库交互的过程,验证 SQL 查询的正确性,同时避免了对实际数据库的依赖,这使得测试过程更加高效、可靠和可控。 主要功能 go-sqlmock 提供了以下功能: 模拟数据库操作: go-sqlmock 模拟了 database/sql 包中与数据库交互的接口,包括执行 SQL 查询、执行 SQL 更新、查询结果等功能。开发者可以使用这个库来模拟查询的返回结果、错误或执行的 SQL。 验证 SQL 查询: 在测试时,开发者可以验证生成的 SQL 查询是否符合预期。例如,可以断言某个 SQL 查询是否被调用,或者某个查询是否使用了正确的参数。 模拟 SQL 查询结果: 你可以模拟 SQL 查询的返回结果,避免实际查询数据库。通过 go-sqlmock 可以手动指定查询结果或错误,从而测试程序在不同结果下的行为。 模拟 SQL 错误: 除了模拟成功的查询结果,还可以模拟 SQL 错误或异常,帮助测试应用程序在出错时的处理.... golang每日一库之DATA-DOG/go-sqlmock golang每日一库
niljson 是 Go 语言中的一个第三方库,旨在提供更简洁和灵活的方式来处理 JSON 编码和解码中的 nil 值。在 Go 的标准库中,json 包在序列化时会将 nil 值(例如,指针、切片或映射的空值)转换为 JSON 中的 null,而 niljson 则可以自定义如何处理这些 nil 值。 主要功能 自定义 nil 值的行为:niljson 允许你指定在序列化 nil 值时的行为,避免默认的 null。 处理空值:例如,空的结构体、空的指针、切片等,可以通过 niljson 序列化时表现为其他值(如空字符串、空数组等)。 安装 可以通过 go get 安装 niljson: go get github.com/lyft/niljson 示例代码 下面是如何使用 niljson 来替代默认的 null 处理行为的示例: package main import ( "encoding/json" "fmt" "github.com/lyft/niljson" ) type User struct { ID *string `json:"id"` Username *stri.... golang每日一库之niljson golang每日一库
errgroup 是 Go 语言的一个第三方库,通常用于处理并发操作,并允许在多个 goroutine 中跟踪错误。它的设计目的是让你能够并行运行多个任务,并在一个任务失败时提前取消其他任务,同时收集和返回第一个错误。 errgroup 是 golang.org/x/sync/errgroup 包中的一个工具,它使得错误处理变得更加简洁,并且可以让你在并发操作中处理错误时不必手动管理 goroutines 和同步。 安装 首先,你需要安装 errgroup 库: go get golang.org/x/sync/errgroup 基本概念 多个 goroutines:你可以启动多个并发的 goroutines。 错误收集:errgroup 会收集所有 goroutine 中返回的错误。 第一个错误优先:一旦第一个错误发生,errgroup 会停止等待其他 goroutines 完成,并且可以提前返回该错误。 errgroup 主要功能 并发执行任务:在 goroutines 中并行执行多个任务。 错误传递:如果任何一个 goroutine 返回错误,errgroup 会返回该错误,其.... golang每日一库之errgroup golang每日一库
gorilla/websocket 是 Go 语言中最常用的 WebSocket 实现之一,它提供了一个简单而功能强大的 API,用于通过 WebSocket 协议建立客户端与服务器之间的实时、双向通信。WebSocket 协议是一种在客户端和服务器之间进行全双工通信的协议,广泛应用于需要低延迟、实时更新的应用场景,比如聊天应用、实时推送系统等。 gorilla/websocket 主要特性 跨平台支持:gorilla/websocket 兼容多种操作系统和环境,支持在 Windows、Linux 和 macOS 上运行。 标准实现:它符合 WebSocket RFC 6455 标准,确保其实现的兼容性和稳定性。 易用性:提供简单易用的 API,可以轻松地实现 WebSocket 服务端和客户端。 支持 ping/pong 机制:可以使用 ping/pong 消息机制保持连接的活跃性。 连接管理:支持并发的 WebSocket 连接管理,能够处理连接的打开、关闭和错误。 灵活的消息处理:支持发送文本和二进制消息,可以根据需要选择不同的消息类型。 安装 首先,使用以下命令安装 goril.... golang每日一库之gorilla/websocket golang每日一库
pkg/errors 是 Go 语言中的一个常用错误处理库,它提供了更丰富的错误处理功能,特别是支持 堆栈跟踪 和 错误的包装。这个库使得错误变得更加易于调试和追踪。 pkg/errors 的主要功能包括: 错误包装:你可以将原始错误嵌套在新的错误中,保持错误的上下文信息。 堆栈跟踪:可以在错误中嵌入堆栈跟踪信息,帮助在发生错误时查看调用链。 格式化错误:能够自定义错误的输出格式,显示详细的错误信息。 安装 pkg/errors 你可以通过以下命令来安装 pkg/errors 库: go get github.com/pkg/errors 常见用法 1. 错误包装(Error Wrapping) pkg/errors 提供了 errors.Wrap 和 errors.WithMessage 方法,用于将错误进行包装,并附加额外的上下文信息。 package main import ( "fmt" "github.com/pkg/errors" "os" ) func someFunc() error { return errors.New("an error occurred") }.... golang每日一库之pkg/errors golang每日一库
/robfig/cron 是 Go 语言中的一个流行的定时任务库,它实现了一个类似于 Unix/Linux 系统中的 cron 的功能,可以用来安排定时任务。该库使用 Go 的 time 包,并提供了一个非常易于使用的 API 来调度和管理任务。 安装 要使用 robfig/cron 库,你需要先安装它。你可以通过以下命令来安装: go get github.com/robfig/cron/v3 基本用法 1. 创建一个定时任务调度器 首先,你需要创建一个新的 cron 实例,使用 cron.New() 创建一个新的定时任务调度器。然后,你可以使用 AddFunc 或 AddJob 方法来注册任务。 示例:基础定时任务 package main import ( "fmt" "github.com/robfig/cron/v3" "time" ) func main() { // 创建一个新的 Cron 调度器 c := cron.New() // 注册一个定时任务,每 5 秒执行一次 c.AddFunc("*/5 * * * * *", func() { fmt.Println(".... golang每日一库之/robfig/cron golang每日一库
spf13/cobra 是一个 Go 语言的命令行应用程序库,它提供了一种方便的方式来构建命令行工具(CLI)。Cobra 允许你定义命令、子命令、标志和参数,以及通过命令行传递的配置项。它广泛应用于许多流行的 Go 项目中,包括 Kubernetes 和 Helm 等。 特性 多级命令支持:允许你创建具有多个子命令的层次结构,每个子命令可以有自己的标志、参数和逻辑。 自动生成帮助文档:Cobra 会自动生成命令的帮助信息,帮助文档会包括命令的描述、使用方法、标志和参数等。 标志(Flags):支持命令行标志(如 --flag)和短标志(如 -f)来传递参数。 绑定配置:可以将命令行参数与配置文件、环境变量等进行绑定。 与 spf13/viper 配合使用:与 viper 库结合使用时,可以轻松管理应用的配置,包括读取文件、环境变量等。 扩展性:可以非常方便地扩展和定制命令行工具,支持中间件、命令执行前后的钩子函数等。 安装 使用 go get 安装 spf13/cobra: go get -u github.com/spf13/cobra@v1.5.0 基本概念 命令(Comman.... golang每日一库之spf13/cobra golang每日一库
go-redsync/redsync/v4 是一个 Go 语言的分布式锁库,它基于 Redis 实现了一个强大的、可靠的分布式锁机制。这个库可以用于在分布式系统中管理共享资源的访问,避免多个实例或进程同时访问同一资源而导致的数据不一致或冲突。 主要功能 分布式锁:确保在分布式系统中的多个实例之间,只有一个实例能够获取锁并访问共享资源。 过期时间:锁可以设置超时时间,防止死锁(例如,某个实例持有锁时崩溃,其他实例会在锁过期后自动获得锁)。 锁的可重入性:可以控制锁的持有者是否可以重复获得同一个锁。 支持多个 Redis 实例:go-redsync 支持多个 Redis 实例来提高容错性。 安装 要使用 go-redsync/redsync/v4 库,首先需要通过 Go Modules 安装该库: go get github.com/go-redsync/redsync/v4 使用示例 1. 初始化和创建 Redsync 实例 首先,导入 go-redsync/redsync/v4 库,并初始化 Redis 连接池。Redsync 对象是进行分布式锁操作的核心。 package main.... golang每日一库之go-redsync/redsync/v4 golang每日一库
dgraph-io/ristretto 是一个 Go 语言实现的高效、线程安全的 LRU(Least Recently Used)缓存。它提供了一种高效的数据缓存机制,能够显著提高系统性能,尤其是在对大量数据进行频繁读取时。ristretto 通过多层次的缓存策略和高效的内存管理,实现了非常好的性能,适用于高并发的场景。 1. 介绍 Ristretto Ristretto 是一种 高效的缓存库,具有以下几个特性: 线程安全:适用于并发环境,能够在多线程中进行安全的读写。 LRU 缓存:基于 LRU 算法,自动淘汰最少使用的数据项。 高效内存管理:使用自定义的 expensive 代价计算和 sharded 哈希表来提供较低的内存开销。 支持高并发:在高并发的场景下表现出色,能够有效减少竞争。 支持缓存项过期:缓存项可以设置最大有效时间,过期后自动移除。 2. 安装 Ristretto 首先,安装 Ristretto 包。确保你已经安装了 Go 环境。 go get github.com/dgraph-io/ristretto 或者将依赖添加到你的项目中: go mod tidy 3.... golang每日一库之dgraph-io/ristretto golang每日一库
go-playground/validator/v10 是一个用于 Go 语言的开源库,主要用于数据验证。它提供了一个简单而强大的机制,用于验证结构体中的字段是否符合预定的规则,常用于 Web 应用的表单验证、API 请求验证等场景。 该库支持多种常见的验证规则,并允许自定义验证规则。validator/v10 在 Go 社区中非常受欢迎,因其高效、灵活、易于使用的特性。 核心特性: 内置验证规则: validator/v10 提供了大量的内置验证规则,例如验证字段是否为有效的电子邮件、手机号、UUID、URL,或者验证字段值是否符合某个范围等。 结构体验证: 可以对 Go 语言中的结构体字段进行验证,支持嵌套结构体和数组、切片、映射等复杂类型的验证。 标签支持(Struct Tags): 通过使用结构体标签(struct tags),可以非常简便地为结构体字段指定验证规则,类似于常见的 JSON 和数据库标签。 自定义验证规则: 如果内置的验证规则不符合需求,validator/v10 允许用户定义自定义验证规则。 嵌套结构体支持: 支持对嵌套结构体字段的验证,可以递归地验.... golang每日一库之go-playground/validator/v10 golang每日一库
这都2025年了,你还在一个一个手动复制字段吗? jinzhu/copier 是一个 Go 语言库,用于深度复制结构体(struct)及其字段,支持嵌套结构体、切片、数组等的复制。这个库的主要目标是通过简单的 API 提供高效、易用的对象复制功能,避免手动编写复制逻辑。 核心特性: 深度复制: 支持深度复制结构体及其嵌套字段,包括切片、数组、映射(map)等。 对象的字段会递归地被复制到目标对象中。 灵活性: 支持复制不同类型(如基础类型、结构体、切片、指针等)之间的赋值,能够灵活地处理大多数常见场景。 支持通过标签 (struct tag) 来定制字段映射规则,例如可以指定不同字段名的复制规则。 自动映射: copier 会根据字段名进行自动映射,只要源结构体和目标结构体的字段名相同。 如果字段名不同,可以通过结构体标签来指定映射规则。 性能: 由于是基于 Go 的反射机制实现的,所以 copier 在性能上相对较好,但在处理非常大的数据量时,可能还是比手动复制稍慢一些。 支持指针复制: copier 支持复制结构体指针,避免了手动解引用的麻烦。 安装: 可以通过 go g.... golang每日一库之jinzhu/copier golang每日一库
fsnotify/fsnotify 是一个 Go 语言库,用于监控文件系统中的变化,包括文件和目录的修改、删除、创建等。这个库非常适合用于实现文件监控功能,例如日志文件监控、配置文件热加载、文件同步等应用场景。 核心功能: 文件和目录监控:可以监控单个文件或目录的变化。 多平台支持:支持 Linux、macOS 和 Windows 操作系统。 事件类型:支持多种文件事件,如创建、删除、修改、重命名等。 高效的事件通知:基于操作系统提供的文件系统通知机制,具有较高的效率。 文件监控粒度:支持文件和目录级别的事件监听,可以灵活选择监控路径。 安装 使用 go get 命令安装 fsnotify 库: go get github.com/fsnotify/fsnotify 主要特点 平台兼容性:fsnotify 库底层会根据操作系统的不同,选择不同的方式来监听文件变化。对于 Linux,使用 inotify,对于 macOS,使用 kqueue,对于 Windows,使用 ReadDirectoryChangesW。 高效性:它是基于操作系统的底层文件监控机制,能够高效地处理大量文件的变化.... golang每日一库之fsnotify/fsnotify golang每日一库
github.com/bytedance/go-tagexpr/v2 是字节跳动公司开源的一个高性能、灵活的 Go 语言库,主要用于解析和执行标签表达式(Tag Expression)。标签表达式通常用于在结构体、数据记录或其他上下文中动态地评估条件,例如在监控系统、数据过滤和规则引擎等场景中非常有用。 该库允许开发者通过结构体标签定义表达式,表达式可以基于某些条件来决定数据是否满足特定规则。它支持常见的条件运算符(如 =、>、<= 等),并且可以扩展自定义函数和操作符,具有很强的灵活性。 核心特性: 高性能:优化的解析器和计算引擎,能够处理大规模数据。 灵活的表达式语法:支持逻辑运算符、比较运算符、函数调用等多种表达式形式。 可扩展:支持自定义函数和扩展运算符,能够灵活满足不同需求。 结构体标签解析:可以解析结构体的标签,允许在结构体的字段标签中嵌入表达式,动态计算字段值。 主要功能: 通过结构体标签(tag)来定义表达式。 支持基本的逻辑运算符(and, or, not)和比较运算符(=, !=, >, <, >= 等)。 支持内置函数(如 len().... 有更新! golang每日一库之bytedance/go-tagexpr golang每日一库
shopspring/decimal 是一个用于处理任意精度十进制浮点数的 Go 语言库,通常用于金融计算、货币相关计算等场景。标准的 float64 类型可能无法满足精确度要求,因为浮点数的表示方式是近似的,特别是在进行累加、除法和精确比较时可能会导致舍入误差。 shopspring/decimal 提供了一个高精度的十进制类型 decimal.Decimal,它确保在进行数学运算时不丢失精度。这个库特别适合用于需要严格计算精度的场景,例如处理货币、财务、税务等领域中的数值计算。 1. 安装 shopspring/decimal 要使用 shopspring/decimal,首先需要安装它。可以使用以下命令来安装: go get github.com/shopspring/decimal 2. 基本用法 创建 decimal.Decimal 值 从字符串创建:使用 decimal.NewFromString 方法从字符串创建 Decimal。 从浮点数创建:使用 decimal.NewFromFloat 方法从浮动数创建。 从整数创建:使用 decimal.NewFromInt 方.... golang每日一库之shopspring/decimal golang每日一库
BigCache 是一个为 Go 语言设计的高效内存缓存库,专门针对大规模缓存应用场景进行了优化。其设计目标是让开发者能够在高并发、高吞吐量的情况下,轻松处理大量缓存项而不牺牲性能。 主要特点 内存优化: BigCache 在内存管理方面进行了大量优化,特别是当你需要存储非常多的小对象时,BigCache 可以有效减少内存的碎片化,避免内存浪费。 使用分区(sharding)技术来分布缓存,避免了单个大内存块的管理问题,从而提升了性能。 高并发支持: 采用无锁设计,能够在高并发的环境下保持优异的性能表现。每个缓存项都有独立的锁,减少了竞争和阻塞。 缓存项过期: 支持设置缓存项的过期时间(TTL)。当缓存项超过设定的过期时间后,BigCache 会自动清除这些缓存项。 提供自动清理的机制,不需要手动管理过期项。 高效的内存回收: 采用定时清理策略定期清理过期缓存,确保内存不会因过多的无效缓存而占用过多资源。 简易的接口: 提供了简单的缓存操作接口,支持常见的 Set、Get、Delete 操作,易于集成到现有的应用中。 使用场景 高并发缓存:适合需要高并发、高吞吐量的缓存系统,.... golang每日一库之bigcache golang每日一库
Lancet 是一个 Go 语言的开源工具库,旨在为 Go 开发者提供一些常见且实用的功能,使得 Go 编程更加简洁和高效。Lancet 提供了大量的工具函数和扩展,类似于 JavaScript 中的 Lodash 或者 Python 中的工具库,它主要集中在集合(数组、切片、映射)、函数式编程、数据转换等领域。 主要特性 集合操作: Lancet 提供了很多用于操作切片和映射的函数,比如去重、排序、查找、映射等,极大地提高了在 Go 中处理集合的效率。 函数式编程支持: 支持函数式编程风格,如 Map、Filter、Reduce 等,能够简化代码并使其更具可读性。 类型转换和辅助函数: 提供了常用的类型转换工具(例如从 string 转换为 int 或 float),以及一些常用的辅助函数。 性能优化: Lancet 的设计目标之一是提供高效的实现,以确保在大型应用程序中也能提供优异的性能。 简化代码: Lancet 提供了许多通用功能的封装,让开发者不需要重复编写常见操作,从而提高代码的简洁度和可维护性。 常用功能 1. 集合操作 去重:去除切片中的重复元素。 排序:对切.... golang每日一库之 lancet golang每日一库