Skip to content
On this page

Introduction

goes is a framework for building distributed, event-driven applications in Go.

This documentation assumes knowledge of CQRS, event-sourcing, and other related concepts. Please make yourself familiar with these before reading further.

Work in progress

This documentation is work-in-progress and very likely lacks important information. Please open an issue or start a discussion if you can't find what you're looking for.

Motivation

Building event-sourced applications is a difficult task, especially when adding distributiveness to the system. You have to think about and implement things like "eventual consistency" and "optimistic concurrency", which can be challenging and can lead to hard-to-debug errors (especially in production environments). Much tooling is required to You quickly realize that you

goes tries to provide the basic building blocks that are required by (nearly) all event-driven applications. Additional, flexible tooling allows you to solve common event-sourcing problems with ease.

Limitations

Hard-dependency on google/uuid

goes has a hard-dependency on Google's UUID library for the ids of events, commands, and aggregates. This requires you to also use UUIDs within your application. Should Go's type inference for type parameters improve in the future, this dependency may be removed to allow for any type to be used as an id.