SDKGo
Go SDK
The Iggy Go SDK is a client library that allows you to interact with the Iggy API from your Go application. It communicates with the Iggy server over TCP using the binary protocol. The package is available on pkg.go.dev and the source code can be found on GitHub.
Installation
go get github.com/apache/iggy/foreign/goQuick start
package main
import (
"context"
"errors"
"log"
"github.com/apache/iggy/foreign/go/client"
"github.com/apache/iggy/foreign/go/client/tcp"
iggcon "github.com/apache/iggy/foreign/go/contracts"
ierror "github.com/apache/iggy/foreign/go/errors"
)
func main() {
cli, err := client.NewIggyClient(
client.WithTcp(tcp.WithServerAddress("127.0.0.1:8090")),
)
if err != nil {
log.Fatal(err)
}
defer func() {
if err := cli.Close(); err != nil {
log.Printf("Error closing client: %v", err)
}
}()
ctx := context.Background()
if err := cli.Connect(ctx); err != nil {
log.Fatal(err)
}
if _, err := cli.LoginUser(ctx, "iggy", "iggy"); err != nil {
log.Fatal(err)
}
// Re-running this example is fine: an existing stream or topic is not an error.
if _, err := cli.CreateStream(ctx, "sample-stream"); err != nil &&
!errors.Is(err, ierror.ErrStreamNameAlreadyExists) {
log.Fatal(err)
}
streamId, err := iggcon.NewIdentifier("sample-stream")
if err != nil {
log.Fatal(err)
}
if _, err := cli.CreateTopic(
ctx,
streamId,
"sample-topic",
1,
iggcon.CompressionAlgorithmNone,
iggcon.IggyExpiryNeverExpire,
0,
nil,
); err != nil && !errors.Is(err, ierror.ErrTopicNameAlreadyExists) {
log.Fatal(err)
}
topicId, err := iggcon.NewIdentifier("sample-topic")
if err != nil {
log.Fatal(err)
}
message, err := iggcon.NewIggyMessage([]byte("Hello from Go!"))
if err != nil {
log.Fatal(err)
}
if err := cli.SendMessages(
ctx,
streamId,
topicId,
iggcon.None(),
[]iggcon.IggyMessage{message},
); err != nil {
log.Fatal(err)
}
log.Println("Message sent")
}Examples
Working examples are available in the examples/go directory, including a getting-started example with producer and consumer.