Goro is a Go client library for Event Store.
package main
import (
"bytes"
"context"
"encoding/json"
"fmt"
"github.com/vectorhacker/goro"
)
func main() {
// create a client to use the Event Store
client := goro.Connect("http://localhost:2113", goro.WithBasicAuth("admin", "changeit"))
writer := client.Writer("messages")
reader := client.FowardsReader("messages")
catchupSubscription := client.CatchupSubscription("messages", 0) // start from 0
data := []byte("{\"message\": \"hello world\"}")
// write the event
ctx := context.Background()
event := goro.CreateEvent(
"message",
data,
nil, // nil metadata
0,
)
err = writer.Write(ctx, goro.ExpectedVersionAny, event)
if err != nil {
panic(err)
}
// subscribe to a stream of events
go func() {
ctx := context.Background()
messages := catchupSubscription.Subscribe(ctx)
for message := range messages {
fmt.Printf("%s\n", messages.Event.Data)
}
}()
// read events
events, err := reader.Read(ctx, 0, 1)
if err != nil {
panic(err)
}
for _, event := range events {
fmt.Printf("%s\n", event.Data)
}
}
- Tests
- Competing Consumers
- Projections
- Read Events
- Stream Events
- Write Events
- User Management