跳到主要内容

Golang Awesome

常用库

学习

日志

数据库驱动

数据库相关

Web

提示
  • Go 本身的 HTTP 处理已经比较完备,选择框架和库尽量以增强为主,避免选择全新实现
  • 兼容 Go HTTP 处理逻辑的库能够相互组合使用

路由/Router

  • chi
    • 标准接口
    • 开发比 mux 活跃
    • radix trie - 类似 httprouter - 性能优于 mux
    • 自带较多 middleware
  • gorilla/mux
    • 不推荐使用
    • 非常便于使用路由,增强 go http 功能
    • 变量匹配路由 - O(n)
  • julienschmidt/httprouter
    • 牺牲功能换取性能
    • 不适用于 RESTful 接口 - 不能区分路由 /users/like, /users/:userId
  • 参考

框架/Framework

  • kataras/iris
    • BSD-3
  • gin-gonic/gin
    • 默认处理逻辑将请求和响应封装为了 Context
    • 能 Wrap http 的 Handler
    • 基于 httprouter 路由 - 不能区分路由 /users/like, /users/:userId
  • gofiber/fiber
    • 非 net/http 体系
    • 基于 fasthttp
  • cloudwego/hertz
  • emicklei/go-restful
    • 辅助构建 RESTful 类型接口
    • 抽象 Resource 概念
    • 抽象 Entity 编码处理
    • 支持 JSON 和 XML
    • 支持定义 OpenAPI
  • ogen-go/ogen
    • 生成 OpenAPIv3
  • beego
    • 用于快速开发的完整框架 - All in one
    • 不推崇,尽量避免使用
    • 除非所有理念刚好匹配
  • echo
  • revel
  • danielgtaylor/huma
    • Huma REST/GraphQL API Framework for Golang with OpenAPI 3

增强处理

Websocket

  • gorilla/websocket
    • 实现 ws 的首选库
    • 功能比 golang.org/x/net/websocket 丰富完善
  • olahol/melody
    • 基于 gorilla/websocket 封装的简单消息处理库
    • 不再维护,如需修改可以拷贝出来使用
  • gobwas/ws Tiny WebSocket library for Go

Misc

GraphQL

网关

代码生成/Generator

  • cmd/stringer/stringer.go
    • 为 int 枚举生成 String 方法
    • //go:generate stringer -type=Pill
    • -type
    • -output
    • -trimprefix
    • -tags
    • -linecomment - String 返回 Comment 内容
  • google/addlicense
    • 添加 License
    • //go:generate go run github.com/google/addlicense -c Wener -y 2019-present ./
  • fatih/gomodifytags
    • 添加 json tag
    • gomodifytags -file demo.go -struct Server -add-tags json -add-options json=omitempty -transform camelcase --skip-unexported
    • transform
      • snakecase - base_domain
      • camelcase - baseDomain
      • lispcase - base-domain
      • pascalcase - BaseDomain
      • titlecase - Base Domain
      • keep
  • hexdigest/gowrap
    • 生成 interface 实现,辅助实现修饰模式
  • awalterschulze/goderive
    • 为 Struct 生成 Equal、Compare、DeepCopy、GoString、Hash
    • 为类型生成 Set 操作
    • 生成函数式编程方法
    • 生成并发操作
  • miku/zek
  • mholt/json-to-go
  • gzuidhof/tygo
    • Go -> Typescript
  • 功能性

JSON

数据处理/Data

网络/Network

协议/Protocol

事件驱动/Event

服务框架/Service Framework

  • dapr/dapr portable, event-driven, runtime for building distributed applications
    • Sidecar 模式
    • 微软 项目
  • AsynkronIT/protoactor-go
    • Proto Actor - Ultra fast distributed actors for Go, C# and Java/Kotlin
  • wasmCloud/wasmCloud
    • wasm actor 平台 - 支持 tinygo
  • RichardKnop/machinery asynchronous task queue/job queue based on distributed message passing
  • hibiken/asynq
    • MIT, Golang
    • Redis
    • Simple, reliable, and efficient distributed task queue in Go
  • twitchtv/twirp simple RPC framework with protobuf service definitions
    • protobuf+net/http
  • gogf/gf

微服务框架/Microservices Framework

大多微服务框架着重于 RPC、服务发现、配置,并提供基础的中间件 监控、Trace。

国产

国内环境

Markdown

认证授权/Auth

  • dexidp/dex - OIDC, IdP
  • ory
    • hydra - OIDC, IdP
    • kratos - 用户注册管理
    • oathkeeper - 访问代理 - 注入授权信息
    • keto - 访问控制服务
    • fosite - Golang OAuth2 框架
  • Permify/permify-gorm

Plugin

  • 扩展/插件/Extension/Plugin - 动态库
  • plugin - Linux, FreeBSD, macOS
    • -buildmode=plugin
      • 只支持 Linux, FreeBSD, macOS - dlopen
      • 需要 cgo - #19569
    • Lookup symbol 强转类型进行使用 - 类似 dlopen - 底层使用 dlopen
    • main 下 exported 的符号都可以使用
    • 加载时所有包的 init 都会触发
    • plugin 不支持 close - go 涉及到 gc 和全局状态
    • 交互不需要序列化 - 相同内存空间
  • hashicorp/go-plugin
    • 基于 RPC 的插件系统
      • 交互信息需要序列化
      • 用于专门的场景 - 例如不能用于 Hook HTTP 请求
    • 多进程
      • 隔离 cgo
      • 避免 crash
      • 支持热升级
      • 多语言

语言/Language

Template

有趣

控制理论 / Control theory

Library

Tool

go install github.com/jondot/goweight@latest
cd cmd/server
goweight

Debug

Service

Performance

OS/操作系统

Lower Level

ML/机器学习

  • sjwhitworth/golearn is a 'batteries included' machine learning library for Go. Simplicity, paired with customisability, is the goal.
  • cdipaolo/goml is a machine learning library written entirely in Golang which lets the average developer include machine learning into their applications.
  • chewxy/gorgonia is a library that helps facilitate machine learning in Go. Write and evaluate mathematical equations involving multidimensional arrays easily.
  • nlpodyssey/spago

SIP/WebRTC

Command Line

Office

Internal

Tools

参考

TBD

Utils

Console

Data

Web

Misc

Hardware

Scripts