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 变量)。

# Openssl

1
go get github.com/forgoer/openssl

官方链接

用于对称和非对称加密和解密的 OpenSSL 库的函数包装

AES DES 3DES RSA HMAC-SHA

类似与JavaScript中的crypto-js, 它可以很方便的进行数据加解密和填充操作.

# Otto

1
go get github.com/robertkrimen/otto

官方链接

在Go中执行JavaScript, 而且它带有JavaScript的语法解析工具(AST).

# PP

1
go get github.com/k0kubun/pp

官方链接

彩色漂亮打印机

# Req

1
go get github.com/imroc/req

Req 是一个简单易用还带黑魔法的 Go HTTP 客户端,写更少的代码,获得更高的效率.

  • 简单且在请求级别和客户端级别支持丰富的设置,均可使用链式调用的方法进行设置,请求级别可以覆盖客户端级别。
  • 强大便捷的调试工具,包括调试日志、性能跟踪,甚至 dump 完整的请求和响应内容 (参考 Debugging - Dump/Log/Trace).
  • 可以直接使用代码替代 curl 或 postman 等工具轻松进行 HTTP 测试,提供全局包装方法和 MustXXX 以用最少的代码测试 API (参考 HTTP 快速测试). 同时支持 HTTP/2 和 HTTP/1.1,如果服务器支持,默认情况下首选 HTTP/2,如有需要,也可以强制指定 HTTP 版本 (参考 强制指定 HTTP 版本).
  • 嗅探并自动解码成 UTF-8 以避免乱码 (参考 自动解码).
  • 根据 Content-Type 自动 Marshal 请求体和 Unmarshal 响应体。
  • Transport 是可导出的, 它支持 dump 请求内容,可以很容易与已有的 http.Client 集成,能以最少的代码改动获得 API 调试能力。
  • 用很简单的设置就可以轻松进行上传和下载,甚至还支持设置回调来显示进度 (参考 上传 和 下载)。
  • 轻松在请求级别或客户端级别设置请求头, cookie, URL 路径参数, 查询参数, 表单数据, Basic Auth, Bearer Token 等设置。
  • 轻松设置客户端的超时时间,代理,证书,重定向策略,Cookie 存储,压缩,keepalive 等。
  • 支持设置请求和响应的中间件,分别会在请求发出前和响应返回前执行 (参考 请求和响应中间件).
  • 支持 HTTP 指纹伪装,这样我们就可以绕过通过识别 HTTP 指纹来禁止爬虫程序访问的网站(参考 HTTP 指纹)。
  • 多种开箱即用的认证方式:HTTP Basic Auth、Bearer Auth Token 和 Digest Auth(参考 认证)。

# Retry-go

1
go get github.com/avast/retry-go

官方链接

用于重试机制的简单库