汇总 Golang 经常使用的第三方库,比如 cobra 等
介绍
-
client
- Go Client 框架 Cobra 介绍
- urfave/cli 一个简单、快速、有趣的软件包,用于在 Go 中构建命令行应用程序
- charmbracelet/bubbletea 功能强大的 TUI 小框架
- scylladb/termtables markdown table、html、等格式输出
-
database
- tidwall/buntdb 适用于 Go 的可嵌入式内存键/值数据库,具有自定义索引和地理空间支持功能
- xujiajun/nutsdb 一个用纯 Go 编写的简单、快速、可嵌入、持久的键/值存储
- 它支持完全可序列化的事务和许多数据结构,如 list、set、sorted set
- sqlc-dev/sqlc Generate type-safe code from SQL
- sqlbuilder 构建自定义 SQL 查询的工具
- xorm 是一个简单但强大的 Go 语言 ORM 库
- jmoiron/sqlx Golang 数据库/SQL 的通用扩展
-
diff/对比
- go-cmp/cmp 使用 +、- 对比两个结构体的差异
-
文件相关
- fsnotify Go 的跨平台文件系统通知库
- spf13/cast 在 Go 中安全轻松地从一种类型转换为另一种类型
-
google
- google/go-querystring 用于将结构体编码为 URL 字符串的 Go 库
- google/wire Go 的编译时依赖注入/pipelie
- google/go-cmp 变量比较
-
go.uber.org
go.uber.org/multierr允许将一个或多个错误组合在一起
-
配置相关
- go-ini/ini Go 中的 INI 文件读写功能
- kelseyhightower/envconfig 通过环境变量管理配置数据
- subosito/gotenv Load environment variables from
.envorio.Readerin Go. - caarlos0/env 一个简单的零依赖库,用于将环境变量解析为结构
- mitchellh/go-homedir 用于在不使用 cgo 的情况下检测和扩展用户的主目录
- joho/godotenv Ruby 的 dotenv 库的 Go 移植(从 .env 文件加载环境变量)
- thedevsaddam/gojsonq A simple Go package to Query over JSON/YAML/XML/CSV Data
- tidwall/gjson 根据 json 路径读数据
- tidwall/sjson Set JSON values very quickly in Go
- tidwall/jj JSON 流编辑器(命令行实用程序)
- antonmedv/expr Go 的表达式语言和表达式评估
-
go-playground
- go-playground/form Decodes url.Values into Go value(s) and Encodes Go value(s) into url.Values. Dual Array and Full map support
- go-playground/pool goroutine or unlimited goroutine pool
- go-playground/webhooks Webhook receiver for GitHub, Bitbucket, GitLab, Gogs
- go-playground/validator Go Struct and Field validation, including Cross Field, Cross Struct, Map, Slice and Array diving
- go-ozzo/ozzo-validation 验证包
- github.com/duke-git/lancet/v2/validator/#IsChineseMobile
-
golang-standards/project-layout 官方不承认的项目标准,可参考
/cmd应用程序入口/internal项目私有代码/pkg外部程序可以引用的库代码
-
log
- logrus Structured, pluggable logging for Go
- go-logr/logr
- lumberjack 是 Go 的日志滚动软件包
- go.uber.org/zap 用 Go 进行快速、结构化、分级的日志记录
zap.ReplaceGlobals(logger)将 logger 设置为全局的 Logger
- rs/zerolog 零分配 JSON 日志记录器,zerolog 相比 zap 更进了一步,它的 API 设计非常注重开发体验和性能
- logdyhq/logdy-core 基于网络的实时日志查看器
- 利用自动生成的过滤器,将任何内容流式传输到网络用户界面
-
Golang Job/Cron Scheduler
- robfig/cron golang 定时任务包
- bamzi/jobrunner 异步执行工作的框架
- roylee0704/gron Cron Jobs in Go
- ajvb/kala 是一个简单、现代、高性能的作业调度器
- 队列
- hibiken/asynq Go 实现的简单、可靠、高效的分布式任务队列
- RichardKnop/machinery 一个基于分布式消息传递的异步任务队列/工作队列
- IBM/sarama a Go library for Apache Kafka
- gocelery/gocelery Go 中的 Celery 分布式任务队列
- goravel/goravel 一个针对队列任务的 Golang 框架
- xxl-job 分布式任务调度平台 XXL-JOB
- robfig/cron golang 定时任务包
-
gonum
- gonum.org/v1/plot Go 语言的一个非常强大、好用的绘图库
-
goroutine
- soheilhy/cmux GoLang 的连接多路复用器:在同一端口上提供不同的服务
- alitto/pond Go 编写的极简且高性能的 goroutine 工作池
- panjf2000/ants 是 Go 语言中高性能、低成本的例行程序池
- Jeffail/tunny A goroutine pool for Go
-
gorm
gorm.io/plugin/optimisticlock乐观锁
-
进度条
- process bar 进度条
- schollz/progressbar
- bitleak/lmstfy A task queue with REST API,千万级延时任务队列
-
cache
- go-cache
- gomodule/redigo Redis 的 Go 客户端
-
静态文件嵌入
- rakyll/statik 将文件嵌入 Go 可执行文件
//go:embedGo 1.16 新增的嵌入文件方式,参考How to Use //go:embed- go-assets 在 Go 可执行文件中简单嵌入静态资源,参考
-
爬虫
- gocolly/colly 适用于 Golang 的优雅抓取器和爬虫框架
-
与其他编程语言集成
- dop251/goja Golang 中运行 JavaScript
- go-python3 将 Go 绑定到 CPython-3 API
- Knetic/govaluate 用于 golang 的任意表达式评估,govaluate 与 JavaScript 中的 eval 功能类似,用于计算任意表达式的值
- maxence-charriere/go-app 使用 Go 编程语言和 WebAssembly 构建渐进式网络应用程序的软件包
-
message queue
- vardius/message-bus 转到简单的异步信息总线
- ThreeDotsLabs/watermill 用 Go 轻松构建事件驱动应用程序,内置订阅-发布实现
-
json
-
testing
- stretchr/testify 带有通用断言和模拟的工具包,可与标准库完美配合
- mockery 提供了使用 stretchr/testify/mock 软件包为 Golang 接口轻松生成模拟的功能。它消除了使用模拟所需的模板编码。
-
微服务框架
- kratos 云原生时代的终极 Go 微服务框架
- fyne Go 语言开发跨平台图形用户界面工具包
- wails 是一个可以使用 go 和 web 技术编写跨平台桌面应用的项目
- alibaba/sentinel-golang 实现 Go 微服务的可靠性和弹性,包括限流等
-
http
- httplimit 为 HTTP 程序提供速率限制的中间件
- urfave/negroni 适用于 Golang 的 HTTP 中间件
- h2non/gentleman 面向 Go 的插件驱动、可扩展 HTTP 客户端工具包
- sethvargo/go-retry Go library for retrying with configurable backoffs
- go-resty/resty Simple HTTP and REST client library for Go
- emicklei/go-restful package for building REST-style Web Services using Go
- imroc/req A golang http request library for humans
-
regex
- mingrammer/commonregex Go 常用正则表达式集
-
rpc
net/rpcrpc 库内部使用 gob 格式传输数据net/rpc/jsonrcp- smallnest/rpcx
- twitchtv/twirp 使用 protobuf 服务定义的简单 RPC 框架
-
认证
- dex
- coreos/go-oidc A Go OpenID Connect client
- casbin An authorization library that supports access control models like ACL, RBAC, ABAC in Golang
- markbates/goth 为 Go 网络应用程序提供了一种简单、简洁和习以为常的方法来编写身份验证包,支持众多第三方库
- openshift/osin Golang OAuth2 server library
-
GUI
- fyne-io/fyne Go 语言跨平台图形用户界面工具包
-
- gabriel-vasile/mimetype
- h2non/filetype 通过文件 magic code 判断文件类型,参考
net/http包下的方法http.DetectContentType()通过前 512 个字符判断文件类型- ko 文件判断,使用 modinfo 命令
- sturct
- imdario/mergo 合并 Go 结构体和 map
- jinzhu/copier golang 实现的复制器,将值从结构复制到结构等
- mitchellh/mapstructure Go library for decoding generic map values into native Go structures and vice versa
- Jeffail/gabs 用于在 Go 中解析、创建和编辑未知或动态 JSON
- common-nighthawk/go-figure 输出 ASCII 码艺术字
- gorilla
- gorilla/mux 是一款功能强大的 HTTP 路由器和 URL 匹配器,用于构建 Go 网络服务器
- gorilla/handlers 是一个有用的中间件集合,用于 Go HTTP 服务和网络应用程序
- gorilla/schema 为结构体填充表单值,处理表单的库
- gorilla/securecookie 为 Go 网络应用程序编码和解码经过验证和可选加密的 cookie 值
- gorilla/sessions 提供 cookie 和文件系统会话,并为自定义会话后端提供基础架构
- Masterminds/semver 提供了在 Go 中使用语义版本的能力
- Semantic Versioning
- 主版本号:当你做了不兼容的 API 修改
- 次版本号:当你做了向下兼容的功能性新增
- 修订号:当你做了向下兼容的问题修正
- 正则
^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$v?([0-9]+)(\.[0-9]+)?(\.[0-9]+)?(参考)v?([0-9]+)(\.[0-9]+)?(\.[0-9]+)?(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?
- Semantic Versioning
- date
- araddon/dateparse GoLang 在不预先知道格式的情况下解析许多日期字符串
- uniplaces/carbon Time 的扩展
- shirou/gopsutil Python 工具库 psutil 的 Golang 移植版
- html/template
- valyala/quicktemplate 快速、强大、易用的 Go 模板引擎。优化速度,热路径零内存分配。比 html/template 快多达 20 倍
- valyala/fasttemplate 简单快捷的 Go 模板引擎
- PuerkitoBio/goquery A little like that j-thing, only in Go.
- goreman 是 go 语言编写的多进程管理工具,对 ruby 的 foreman 的重写
- bits-and-blooms/bitset 位运算
- RoaringBitmap/roaring Go (golang) 中的处理位图库,由 InfluxDB、Bleve 和 DataDog 使用
- gore 另一款运行良好的 Go REPL。具有行编辑、代码自动补全等功能。CMD 单步执行 golang 命令
- hajimehoshi/ebiten 适用于 Go 的简单 2D 游戏引擎
- tianon/gosu 基于 Go 的简单
setuid+setgid+setgroups+exec - useragent Go lib 库,用来分析 HTTP User Agents
- uuid
github.com/rs/xid是一个全局唯一 ID 生成器库,可直接在服务器代码中安全使用github.com/segmentio/ksuid是一个高效、全面、经过实战检验的 Go 库,用于生成和解析一种名为 KSUID 的特定全局唯一标识符
- testcontainers/testcontainers-go 是一个 Go 包,可以轻松创建和清理基于容器的依赖项以进行自动化集成/冒烟测试
demo
req
package main
import (
"fmt"
"github.com/imroc/req"
)
func main() {
req.Debug = true
headers := req.Header{
"content-type": "application/json",
}
resp, err := req.Get("https://api.github.com", headers)
fmt.Println(resp, err, resp.Dump())
}
websocket
-
也可以参考
github.com/gorilla/websocket实现 -
server.go
package main
import (
"io"
"net/http"
"golang.org/x/net/websocket"
)
func echoServer(ws *websocket.Conn) {
defer ws.Close()
io.Copy(ws, ws)
}
func main() {
http.Handle("/", websocket.Handler(echoServer))
err := http.ListenAndServe(":12345", nil)
panic(err)
}
- client.go
package main
import (
"fmt"
"golang.org/x/net/websocket"
)
func main() {
origin := "http://localhost/"
url := "ws://localhost:12345/ws"
ws, err := websocket.Dial(url, "", origin)
if err != nil {
panic(err)
}
if _, err := ws.Write([]byte("hello, world!\n")); err != nil {
panic(err)
}
var msg = make([]byte, 512)
var n int
if n, err = ws.Read(msg); err != nil {
panic(err)
}
fmt.Printf("Received: %s.\n", msg[:n])
// or
msgToSend := "Hello"
err = websocket.Message.Send(ws, msgToSend)
var msgToReceive string
err = websocket.Message.Receive(ws, &msgToReceive)
fmt.Println(msgToSend)
}
最近更新
最新评论