跳到正文

入门

go-sequent 是什么

面向支付与账本的 Go CQRS + Event Sourcing 库:SyncInTxn 读模型、OCC、decimal Money、hash chain、Tenancy(多租户)。

go-sequent 是什么

go-sequent 是给支付、钱包、账本这类系统用的 CQRS + Event Sourcing Go 库。你定义 Command、Aggregate、Event 和 Projector(把事件写成查询用读模型,例如余额表);库把写路径串进同一次数据库事务。

你得到什么

  • 每次 Execute:一个数据库事务 + 挂在 context 上的 UnitOfWork
  • 追加事件时的 OCC(用 ExpectedVersion 防并发写冲突)和 Unique keys
  • 余额等账本读模型默认经 SyncInTxn(在写事务里同步更新读模型)更新,提交返回后立刻能读到自己刚写的数据
  • decimal Money、按租户的 Idempotency(同一业务键重复提交只生效一次)、AuthZ、JSON Snapshot、Tombstone(追加标记事件,之后读模型不再暴露个人数据),以及可选的 Outbox 轮询
  • 可选 OpenTelemetry(obs):看写路径延迟、成败与冲突——不能当业务审计源

适合

  • 余额必须和写入同一事务(提交后立刻可读)
  • 多个商户共用一张表(共享 schema + tenant_id)
  • 需要完整的 Command / Event 审计记录

不是 Web 框架

仓库里没有 HTTP / gRPC 服务,没有 Rails 式集成,也不绑通用 CRUD ORM。嵌进你自己的服务进程即可。

与 Sequent(Ruby)的关系

概念命名参考 Sequent Reference Guide;API 与数据模型是 Go 独立实现。永不导入 Ruby Sequent 的数据库。

见 相对 Sequent Ruby 与 锁定决策。

文档随 go-sequent 源码更新;若与 API 不一致,以源码为准。