You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iggy.apache.org by pi...@apache.org on 2026/08/05 07:46:09 UTC

(iggy-website) branch main updated: fix(docs): correct Go SDK quickstart and examples to match the SDK API (closes #36) (#47)

This is an automated email from the ASF dual-hosted git repository.

spetz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iggy-website.git


The following commit(s) were added to refs/heads/main by this push:
     new e105e15b fix(docs): correct Go SDK quickstart and examples to match the SDK API (closes #36) (#47)
e105e15b is described below

commit e105e15b96d7ed8d5b04b48e5441f01e6db2c537
Author: Justin Mclean <ju...@classsoftware.com>
AuthorDate: Wed Aug 5 17:46:02 2026 +1000

    fix(docs): correct Go SDK quickstart and examples to match the SDK API (closes #36) (#47)
---
 content/docs/sdk/go/examples.mdx |  29 +++++++++--
 content/docs/sdk/go/intro.mdx    | 108 +++++++++++++++++++++++++++------------
 2 files changed, 98 insertions(+), 39 deletions(-)

diff --git a/content/docs/sdk/go/examples.mdx b/content/docs/sdk/go/examples.mdx
index d05c483d..ae0ab345 100644
--- a/content/docs/sdk/go/examples.mdx
+++ b/content/docs/sdk/go/examples.mdx
@@ -12,12 +12,15 @@ A complete getting-started example is available in the [examples/go](https://git
 package main
 
 import (
+	"context"
+	"errors"
 	"fmt"
 	"time"
 
 	"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"
 )
 
 var (
@@ -36,19 +39,26 @@ func main() {
 	}
 	defer cli.Close()
 
+	ctx := context.Background()
+	if err := cli.Connect(ctx); err != nil {
+		panic(err)
+	}
+
 	// Log in
-	if _, err := cli.LoginUser("iggy", "iggy"); err != nil {
+	if _, err := cli.LoginUser(ctx, "iggy", "iggy"); err != nil {
 		panic(err)
 	}
 
-	// Create a stream
-	if _, err := cli.CreateStream("sample-stream"); err != nil {
+	// Create a stream. Re-running this example is fine: an existing stream is not an error.
+	if _, err := cli.CreateStream(ctx, "sample-stream"); err != nil &&
+		!errors.Is(err, ierror.ErrStreamNameAlreadyExists) {
 		panic(err)
 	}
 
 	// Create a topic with 1 partition, no compression, no expiry
 	streamIdentifier, _ := iggcon.NewIdentifier(StreamId)
 	if _, err := cli.CreateTopic(
+		ctx,
 		streamIdentifier,
 		"sample-topic",
 		1,                                  // partitions count
@@ -56,7 +66,7 @@ func main() {
 		iggcon.IggyExpiryNeverExpire,
 		0,                                  // max topic size
 		nil,                                // replication factor
-	); err != nil {
+	); err != nil && !errors.Is(err, ierror.ErrTopicNameAlreadyExists) {
 		panic(err)
 	}
 
@@ -69,6 +79,7 @@ func main() {
 		streamIdentifier, _ := iggcon.NewIdentifier(StreamId)
 		topicIdentifier, _ := iggcon.NewIdentifier(TopicId)
 		if err := cli.SendMessages(
+			ctx,
 			streamIdentifier,
 			topicIdentifier,
 			partitioning,
@@ -76,6 +87,7 @@ func main() {
 		); err != nil {
 			panic(err)
 		}
+		fmt.Printf("Sent: %s\n", payload)
 		time.Sleep(500 * time.Millisecond)
 	}
 }
@@ -87,6 +99,7 @@ func main() {
 package main
 
 import (
+	"context"
 	"fmt"
 	"time"
 
@@ -111,8 +124,13 @@ func main() {
 	}
 	defer cli.Close()
 
+	ctx := context.Background()
+	if err := cli.Connect(ctx); err != nil {
+		panic(err)
+	}
+
 	// Log in
-	if _, err := cli.LoginUser("iggy", "iggy"); err != nil {
+	if _, err := cli.LoginUser(ctx, "iggy", "iggy"); err != nil {
 		panic(err)
 	}
 
@@ -124,6 +142,7 @@ func main() {
 		streamIdentifier, _ := iggcon.NewIdentifier(StreamID)
 		topicIdentifier, _ := iggcon.NewIdentifier(TopicID)
 		pollMessages, err := cli.PollMessages(
+			ctx,
 			streamIdentifier,
 			topicIdentifier,
 			consumer,
diff --git a/content/docs/sdk/go/intro.mdx b/content/docs/sdk/go/intro.mdx
index cac50b1e..61256cb3 100644
--- a/content/docs/sdk/go/intro.mdx
+++ b/content/docs/sdk/go/intro.mdx
@@ -16,43 +16,83 @@ go get github.com/apache/iggy/foreign/go
 package main
 
 import (
-    "fmt"
-    "log"
-    iggy "github.com/apache/iggy/foreign/go"
+	"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() {
-    client, err := iggy.NewClient("localhost:8090")
-    if err != nil {
-        log.Fatal(err)
-    }
-    defer client.Close()
-
-    err = client.Login("iggy", "iggy")
-    if err != nil {
-        log.Fatal(err)
-    }
-
-    // Create a stream
-    err = client.CreateStream("my-stream")
-    if err != nil {
-        log.Fatal(err)
-    }
-
-    // Create a topic with 2 partitions
-    err = client.CreateTopic("my-stream", "my-topic", 2)
-    if err != nil {
-        log.Fatal(err)
-    }
-
-    // Send a message
-    err = client.SendMessages("my-stream", "my-topic", 1,
-        [][]byte{[]byte("Hello from Go!")})
-    if err != nil {
-        log.Fatal(err)
-    }
-
-    fmt.Println("Message sent successfully")
+	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")
 }
 ```