跳至正文
Wener Notes

Go Awesome

约 12 分钟阅读
标签:资源精选

Golang Awesome

常用库

  • mux
    • - ⭐️
    • gin, mux
  • ORM
    • - ⭐️
      • 基于反射
      • 目前 Go 里实现最为优美的 ORM
      • XORM 被 gogs 和 gitea 使用,是 gogs 原作者开发 - 但认为比不上 gorm
    • - ⭐️
      • 基于代码生成
      • Meta 信息完善,更适合复杂业务逻辑
  • 命令行/Command
    • - ⭐️
      • 简单易用
    • - ⭐️
      • 目前使用最多
      • 更适合命令行非常复杂的情况,默认 split 处理逻辑
      • flag 由 pflag 处理,配置由 viper 处理
      • 比 urfave/cli 更 unopinioned
      • urfave/cli 更加 declarative
        • cobra fork with only 4 dependencies
      • MIT, Golang
  • IoC/DI
    • dig
  • JWX
  • OIDC
  • 配置
  • 日志
    • zerolog
    • zap
    • logrus
  • HTTP Client
  • Observerable
    • Prometheus Metrics
    • Jaeger
  • Testing
  • 参考

学习

日志

数据库驱动

数据库相关

Web

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

路由/Router

框架/Framework

增强处理

Websocket

Misc

GraphQL

    • GraphQL Schema 生成 Model/Resolver
    • 静态类型,无法动态 Schema
    • 参照 graphql-js 实现
    • BSD-2
    • 类型自动绑定 Schema - 静态 Schema
    • 代码动态生成 Schema - 动态 Schema
    • gqlgen 客户端
    • type-safe Go GraphQL client

网关

代码生成/Generator

JSON

    • Convert between YAML, TOML, JSON, HCL
    • 替代 encoding/json
    • 更好性能,更多功能
      • 自定义类型解码
      • 宽松名字处理
    • 高性能 JSON encode,decode
    • 不兼容 encoding/json - 因此才能提供性能优势
    • 不支持反射
    • 适用于代码生成场景
    • Get Json Path
    • Set Json Path
  • diomatic codec and rpc lib for msgpack, cbor, json, etc.

数据处理/Data

AI/ML

网络/Network

协议/Protocol

    • Simple Go WebDAV server

事件驱动/Event

服务框架/Service Framework

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

微服务框架/Microservices Framework

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

  • standard library for microservices
    • 简单灵活自由拼装 - 因此定位是 kit 和 库
    • 很多抽象接口值得学习
  • - standalone framework for distributed systems development
    • Go Cloud Development Kit
    • design patterns of Erlang/OTP

国产

  • -
    • grpc,wire
    • kratos 命令行工具
    • 哔哩哔哩 RPC 框架
  • -
    • 好未来技术
    • 自定义 DSL + goctl 生成
    • Apache-2.0, Go
    • 字节跳动 RPC 框架
  • -

国内环境

Markdown

认证授权/Auth

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

Plugin

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

语言/Language

Template

有趣

控制理论 / Control theory

Library

Tool

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

Debug

Service

Performance

OS/操作系统

Lower Level

ML/机器学习

SIP/WebRTC

Command Line

Office

Internal

Tools

参考

TBD

Utils

Console

Data

Web

Misc

Hardware

Scripts

关联信息

反向链接、本文链接的其他页面和外部资料。

站内链接

  • Cadence
    笔记 · uber/cadence

    uber/cadence 是什么? · MIT, Golang · 分布式,大规模,持久化,高可用的异构调度引擎 · 用于异步长时间运行的业务逻辑 · Fault Tolerant Actor Framework · fault-oblivious stateful workflow

  • chi
    笔记 · chi

    go-chi/chi · 提供方法更适合用于 REST 接口 · 核心 < 1000 LOC · 0 外部依赖 - 自己实现 pattern 匹配逻辑 · 基于 Patricia Radix trie - 性能优于遍历 · 额外的 HTTP 方法需要先提前注册,否则不会路由

  • entgo
    笔记 · ent

    ent/ent 是什么? · 项目源自 facebook, 加入 LF · 支持 RESTful 接口 · 基于代码生成的 ORM · 支持 MySQL, MariaDB, PostgreSQL, SQLite, Gremlin · 创建和更新使用 setter/getter

  • fx
    笔记 · fx

    uber-go/fx · 基于反射的动态 IoC 容器 · 内部为 uber-go/dig - DI · fx.Supply 不能直接提供 interface · Go 类型检测不到, 使用 constructor 返回 · fx.In 和 fx.Out 要求字段 exported

  • go-micro
    笔记 · go-micro

    asim/go-micro · 基本接口定义+Plugins 提供平台相关实现 · Transport http :52980 · Broker http :52981 · GRPC server :53915 · 参考 · m3o/m3o

  • go-zero
    笔记 · go-zero

    zeromicro/go-zero · 好未来科技 开源 RPC 框架 · 自定义的 DSL · 基于自定义的 goctl 进行生成 · 自定义 DSL 意味着 交互差、生态差、ROI 低 · 几乎是单人在开发

  • GORM
    笔记 · gorm

    Golang 的 ORM 实现 · 基于 Entity 模型 · go-gorm/gorm · 执行过程 · 构建 Statement 对象 · 查询 - 执行 query 回调 · 几乎所有实际操作都是通过 callback 串联起来的 · callbacks 管理 processor 组

  • kratos
    笔记 · kratos

    go-kratos/kratos · MIT, Go · by Bilibili, fork Gin · 微服务框架 · Code Gen, Web, RPC, Service Governance, Integrations · ⚠️ 目前开发不太活跃

  • OIDC
    笔记 · caos/oidc

    caos/oidc · endpoints · /healthz · /ready · /.well-known/openid-configuration · /authorize - AuthorizationEndpoint · /authorize/callback?id - AuthorizationEndpoint

  • rpcx
    笔记 · rpcx

    smallnest/rpcx · 国产 RPC 框架 · smallnest/rpcx-java · Java 实现,不活跃 · 适用方便 · 设计上没有 go-micro 灵活 · 耦合了很多内容 · 通过 server.AuthFunc 设置认证处理而不是 middleware

  • temporal
    笔记 · temporal

    temporalio/temporal · MIT, Go · cadence fork, 包含原始团队人员 · Persistence - Cassandra, PostgreSQL, MySQL · Workflow search - Elasticsearch v6.8+ - 高级搜索

  • tsuru
    笔记 · tsuru/tsuru

    tsuru/tsuru · BSD-3, Go · extensible Platform as a Service · 依赖: MongoDB, Kubernetes, Registry, kubernetes-router

  • wire
    笔记 · wire

    项目进入维护状态 · google/wire · Compile-time DI · 编译时生成 DI 逻辑 · 逻辑清晰明确 · 不是 IoC 容器 · 透明 - IoC 容器是一个不透明的盒子 · 替代 · uber fx, dig

参考资料

GitHub292 条
Hacker News3 条
依赖包5 条
其他外链35 条
最近更新commit 4b6e1d9编辑