Go 第三方库

发布时间: 更新时间: 总字数:2697 阅读时间:6m 作者:IP:上海 网址

汇总 Golang 经常使用的第三方库,比如 cobra 等

介绍

  • client

  • 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

  • go.uber.org

    • go.uber.org/multierr 允许将一个或多个错误组合在一起
  • 配置相关

  • go-playground

  • 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

  • gonum

  • goroutine

    • soheilhy/cmux GoLang 的连接多路复用器:在同一端口上提供不同的服务
    • alitto/pond Go 编写的极简且高性能的 goroutine 工作池
    • panjf2000/ants 是 Go 语言中高性能、低成本的例行程序池
    • Jeffail/tunny A goroutine pool for Go
  • gorm

    • gorm.io/plugin/optimisticlock 乐观锁
  • 进度条

  • cache

    • go-cache
    • gomodule/redigo Redis 的 Go 客户端
    • github.com/alicebob/miniredis 一个纯 Go 编写的 Redis 服务器实现,专门用于单元测试和集成测试
      • 由于它实现了 Redis 的 TCP 协议(RESP),可以直接把它的地址传给 go-redis 客户端
      • 适用场景:单元测试、集成测试、或者需要本地快速原型开发的场景
      • 支持 Redis Lua 脚本
    • github.com/echovault/sugardb (原名EchoVault) 是一个非常优秀的 Go 语言原生高性能、分布式、内存数据存储引擎。它最大的特点就是既能独立作为 Server 运行,也可以作为内嵌库(Embedded)直接集成到 Go 应用程序中,且完全兼容 Redis 的 RESP 协议
      • 目前不支持客户端随时动态执行 Lua 脚本的标准 EVAL 命令,支持通过 Lua 模块扩展命令 (Lua Modules Extension)
  • 静态文件嵌入

  • 爬虫

    • 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

  • json

  • testing

    • stretchr/testify 带有通用断言和模拟的工具包,可与标准库完美配合
    • mockery 提供了使用 stretchr/testify/mock 软件包为 Golang 接口轻松生成模拟的功能。它消除了使用模拟所需的模板编码。
  • 微服务框架

    • kratos 云原生时代的终极 Go 微服务框架
    • fyne Go 语言开发跨平台图形用户界面工具包
    • wails 是一个可以使用 go 和 web 技术编写跨平台桌面应用的项目
    • alibaba/sentinel-golang 实现 Go 微服务的可靠性和弹性,包括限流等
  • http

  • regex

  • rpc

    • net/rpc rpc 库内部使用 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 语言跨平台图形用户界面工具包
  • mime

http.DetectContentType ...
  • sturct
  • 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\-]+)*))?
  • date
  • shirou/gopsutil Python 工具库 psutil 的 Golang 移植版
  • html/template
  • 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)
}