Featured image of post 常用Golang第三方库

常用Golang第三方库

# Gin

1
go get github.com/gin-gonic/gin

官方链接

Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似 martini 的 API,性能要好得多,多亏了 httprouter,速度提高了 40 倍。 如果您需要性能和良好的生产力,您一定会喜欢 Gin。

# Gorm

1
go get gorm.io/gorm

官方链接

  • 全功能 ORM
  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
  • Create,Save,Update,Delete,Find 中钩子方法
  • 支持 Preload、Joins 的预加载
  • 事务,嵌套事务,Save Point,Rollback To Saved Point
  • Context、预编译模式、DryRun 模式
  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
  • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
  • 复合主键,索引,约束
  • Auto Migration
  • 自定义 Logger
  • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

# Gen

1
go get gorm.io/gen

官方链接

  • 来自动态原始 SQL 的惯用且可重用的 API
  • 100% 类型安全的 DAO API,无接口{}
  • Database To Struct 遵循 GORM 约定
  • GORM 在底层,支持 GORM 支持的所有功能、插件、DBMS

# Ants

1
go get github.com/panjf2000/ants/v2

官方链接

ants是一个高性能的 goroutine 池,实现了对大规模 goroutine 的调度管理、goroutine 复用,允许使用者在开发并发程序的时候限制 goroutine 数量,复用资源,达到更高效执行任务的效果。

# Zap

1
go get go.uber.org/zap

官方链接

在 Go 中快速、结构化、分级的日志记录。

# Cast

1
go get github.com/spf13/cast

官方链接

Cast 是一个库,用于以一致且简单的方式在不同的围棋类型之间进行转换。

Cast 提供了简单的函数,可以轻松地将数字转换为字符串,一个 接口成布尔等。Cast 在明显 转换是可能的。它不会试图猜测你的意思, 例如,只有当字符串是字符串时,才能将字符串转换为 int int 的表示形式,例如“8”。Cast 是为在 Hugo 中使用而开发的,Hugo 是一个使用 YAML、TOML 或 JSON 的网站引擎 对于元数据。

# 使用改进版本

1
go get github.com/kaylee595/cast

官方链接

修复了一些官方不解决的BUG(Fixed some bugs that are not officially resolved)

  1. StringMapE 支持数组类型
  2. ToInt系列的函数支持08 09

# Viper

1
go get github.com/spf13/viper

官方链接

Viper 是适用于 Go 应用程序(包括 12 因素应用程序)的完整配置解决方案。 它设计用于在应用程序中工作,可以处理所有类型的配置需求 和格式。它支持:

  • 设置默认值
  • 读取 JSON、TOML、YAML、HCL、envfile 和 Java 属性配置文件
  • 实时观看和重新读取配置文件(可选)
  • 从环境变量中读取
  • 从远程配置系统(etcd 或 Consul)读取,并观察更改
  • 从命令行标志读取
  • 从缓冲区读取
  • 设置显式值
  • Viper 可以被视为满足所有应用程序配置需求的注册表。

# Cobra

1
go get github.com/spf13/cobra

官方链接

Cobra 是 Go 的 CLI 框架。它包含一个用于创建强大的现代 CLI 应用程序的库,以及一个用于快速生成基于 Cobra 的应用程序和命令文件的工具。

它是由 Go 团队成员 spf13 为 hugo 创建的,并已被最受欢迎的 Go 项目采用。

# PFlag

1
go get github.com/spf13/pflag

官方链接

pflag 是 Go 标志包的直接替代品,实现 POSIX/GNU 样式的 –标志。

pflag 与 POSIX 建议的 GNU 扩展兼容 用于命令行选项。有关更精确的描述,请参阅 下面的“命令行标志语法”部分。

pflag 在与 Go 语言相同风格的 BSD 许可证下可用, 可以在 LICENSE 文件中找到。

# CacheGo

1
go get github.com/faabiosr/cachego

官方链接

简单的缓存接口

# Validator

1
go get github.com/go-playground/validator/v10

官方链接

包验证程序基于标记实现结构和单个字段的值验证。

它具有以下独特功能:

  • 使用验证标记或自定义验证程序进行跨字段和跨结构验证。
  • 切片、数组和地图潜水,允许验证多维字段的任何或所有级别。
  • 能够深入研究映射键和值以进行验证
  • 通过在验证之前确定接口的基础类型来处理接口类型。
  • 处理自定义字段类型,例如 sql 驱动程序 Valuer,请参阅 Valuer
  • 别名验证标记,允许将多个验证映射到单个标记,以便更轻松地定义结构上的验证
  • 提取自定义字段名称,例如,可以指定在验证时提取 JSON 名称,并在生成的 FieldError 中提供该名称
  • 可自定义的 i18n 感知错误消息。
  • gin Web 框架的默认验证器;在 Gin 中从 V8 升级到 V9 请参阅此处

# Schema

1
go get github.com/gorilla/schema

官方链接

Package gorilla/schema 将结构体与表单值相互转换。

表单数据和结构体之间互转

# Testify

1
go get github.com/stretchr/testify

官方链接

Go 代码 (golang) 一组包,它们提供了许多工具来证明您的代码将按照您的预期运行。

# Dateparse

1
go get github.com/araddon/dateparse

官方链接

在事先不知道格式的情况下解析许多日期字符串。 使用扫描仪读取字节并使用状态机查找格式。 比基于霰弹枪的解析方法快得多。

# ProgressBar (个人感觉比较好用)

1
go get github.com/cheggaaa/pb/v3

官方链接

控制台程序的简单进度条。

# Progressbar

1
go get github.com/schollz/progressbar/v3

官方链接

一个非常简单的线程安全进度条,应该可以在每个操作系统上正常工作。 我需要一个 croc 的进度条,但我尝试的所有方法都有问题,所以我又做了一个。 为了与操作系统无关,我不打算支持多行输出。

# Gomock

1
go get go.uber.org/mock

官方链接

gomock 是 Go 编程语言的模拟框架。 它与 Go 的内置测试包集成良好,但也可以在其他上下文中使用。

# UUID

1
go get github.com/google/uuid

官方链接

uuid 包根据 RFC 4122 和 DCE 1.1:身份验证和安全服务生成和检查 UUID。

# Gron

1
go get github.com/roylee0704/gron

官方链接

Gron 为编写和部署 cron 作业提供了清晰的语法。

# 使用改进版本

1
go get github.com/kaylee595/gron

官方链接

主要是修复时间不正确问题, 官方的版本提了pull request但是不修复.

# Lumberjack

1
go get gopkg.in/natefinch/lumberjack.v2

官方链接

Lumberjack 是一个 Go 包,用于将日志写入滚动文件。

# Rate

1
go get golang.org/x/time/rate

官方链接

rate 提供速率限制器。

令牌桶限制器

# Resize

1
go get github.com/nfnt/resize

官方链接

使用常用插值方法调整图像大小。

# Colly

1
go get github.com/gocolly/colly/v2

官方链接

闪电般快速且优雅的 Gophers 抓取框架

Colly 提供了一个干净的接口来编写任何类型的爬虫/爬虫/蜘蛛。

借助 Colly,您可以轻松地从网站中提取结构化数据,这些数据可用于多种应用,例如数据挖掘、数据处理或归档。

# Excelize

1
go get github.com/xuri/excelize/v2

官方链接

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。使用本类库要求使用的 Go 语言为 1.18 或更高版本。

# Tint

1
go get github.com/lmittmann/tint

官方链接

Tint 实现了一个零依赖的 slog.Handler 来写入着色(彩色)日志。 它的输出格式受到 Zerolog.ConsoleWriter 和 slog.TextHandler 的启发。

# Lo

1
go get github.com/samber/lo@v1

官方链接

✨ samber/lo 是一个基于 Go 1.18+ 泛型的 Lodash 风格的 Go 库。

提供各种常用的工具函数: slices/maps/math/ strings/channels/intersection/ search/Conditional/manipulation/ Concurrency/Error

# Tracerr

1
go get github.com/ztrue/tracerr

官方链接

带调用栈的错误, 更精准的定位错误位置!

# 使用改进版本

1
go get github.com/kaylee595/tracerr

官方链接

新增了一个函数, 需要go版本1.18及以上, 因为需要用到泛型的支持.

# Multierror

1
go get github.com/hashicorp/go-multierror

官方链接

go-multierror 是 Go 的一个包,它提供了一种将错误值列表表示为单个错误的机制。

这允许 Go 中的函数返回一个实际上可能是错误列表的错误。 如果调用者知道这一点,他们可以打开列表并访问错误。 如果调用者不知道,错误会格式化为人类可读的格式。

go-multierror 完全兼容 Go 标准库错误包,包括函数 As、Is 和 Unwrap。 这提供了一种用于反思错误值的标准化方法。

# Goquery

1
go get github.com/PuerkitoBio/goquery

官方链接

goquery 为 Go 语言带来了与 jQuery 类似的语法和功能集。它基于 Go 的 net/html 包和 CSS 选择器库 cascadia。由于 net/html 解析器返回的是节点,而不是功能齐全的 DOM 树,因此 jQuery 的状态操作函数(如 height()、css()、detach())已被省略。

此外,由于 net/html 解析器需要 UTF-8 编码,因此 goquery 也需要:调用者有责任确保源文档提供 UTF-8 编码的 HTML。请参阅 wiki 了解执行此操作的各种选项。

从语法上讲,它尽可能接近 jQuery,尽可能使用相同的函数名称,以及温暖而模糊的可链接接口。 jQuery 是一个非常流行的库,我觉得编写一个类似的 HTML 操作库最好遵循它的 API 而不是重新开始(本着与 Go 的 fmt 包相同的精神),即使它的一些方法不太直观(看着你,index()……)。

# SlogMulti

1
go get github.com/samber/slog-multi

官方链接

设计 slog 处理程序的工作流程:

扇出:将 log.Record 并行分发到多个 slog.Handler

管道:动态重写 log.Record(例如:出于隐私原因)

路由:将 log.Record 转发到所有匹配的 slog.Handler

故障转移:将 log.Record 转发到第一个可用的 slog.Handler

负载平衡:通过将 log.Record 发送到 slog.Handler 池来增加日志带宽

# DotEnv

1
go get github.com/joho/godotenv

官方链接

Ruby dotenv 项目的 Go (golang) 端口(从 .env 文件加载 env 变量)。