From 7b31bf13b87d1e16e15f8cc0abe43e29b5cf1cb4 Mon Sep 17 00:00:00 2001 From: Lewis Marshall Date: Mon, 20 Apr 2026 11:00:34 +0100 Subject: [PATCH 1/2] Add Go examples for message updates, deletes, and appends Adds Go code examples to the updates-deletes.mdx docs page for all five operations: updateMessage, deleteMessage, appendMessage, getMessage, and getMessageVersions. These are now supported as of ably-go v1.4.0. --- src/pages/docs/messages/updates-deletes.mdx | 114 ++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/src/pages/docs/messages/updates-deletes.mdx b/src/pages/docs/messages/updates-deletes.mdx index 60e393d768..3c3de4103b 100644 --- a/src/pages/docs/messages/updates-deletes.mdx +++ b/src/pages/docs/messages/updates-deletes.mdx @@ -215,6 +215,31 @@ operation = MessageOperation(description="reason for update") result = await channel.update_message(message, operation) print("Message updated") ``` + +```go +realtime, err := ably.NewRealtime(ably.WithKey("{{API_KEY}}")) +if err != nil { + panic(err) +} +// This assumes there is an 'updates' namespace with a rule enabling updates and deletes +channel := realtime.Channels.Get("updates:example") + +// Publish the original message and get its serial from the result +result, err := channel.PublishWithResult(context.Background(), "message-name", "original-data") +if err != nil { + panic(err) +} + +// Publish an update using the serial +msg := &ably.Message{ + Serial: *result.Serial, + Data: "updated-data", +} +_, err = channel.UpdateMessage(context.Background(), msg, ably.UpdateWithDescription("reason for update")) +if err != nil { + panic(err) +} +``` #### Returns @@ -399,6 +424,31 @@ operation = MessageOperation(description="reason for delete") result = await channel.delete_message(message, operation) print("Message deleted") ``` + +```go +realtime, err := ably.NewRealtime(ably.WithKey("{{API_KEY}}")) +if err != nil { + panic(err) +} +// This assumes there is an 'updates' namespace with a rule enabling updates and deletes +channel := realtime.Channels.Get("updates:example") + +// Publish the original message and get its serial from the result +result, err := channel.PublishWithResult(context.Background(), "message-name", "original-data") +if err != nil { + panic(err) +} + +// Delete the message using the serial +msg := &ably.Message{ + Serial: *result.Serial, + Data: "", // clear the previous data +} +_, err = channel.DeleteMessage(context.Background(), msg, ably.UpdateWithDescription("reason for delete")) +if err != nil { + panic(err) +} +``` #### Returns @@ -608,6 +658,35 @@ channel.publish([.init(name: "message-name", data: "Hello")]) { result, error in } } ``` + +```go +realtime, err := ably.NewRealtime(ably.WithKey("{{API_KEY}}")) +if err != nil { + panic(err) +} +// This assumes there is an 'updates' namespace with a rule enabling updates and deletes +channel := realtime.Channels.Get("updates:example") + +// Publish the original message and get its serial from the result +result, err := channel.PublishWithResult(context.Background(), "message-name", "Hello") +if err != nil { + panic(err) +} + +// Append to the message a few times (without needing to await each to finish +// before doing the next); the data will be concatenated +for _, fragment := range []string{", ", "World", "!"} { + err := channel.AppendMessageAsync(&ably.Message{ + Serial: *result.Serial, + Data: fragment, + }, nil) + if err != nil { + panic(err) + } +} + +// the message in history now has data: "Hello, World!" +``` #### Returns @@ -734,6 +813,23 @@ serial = "0123456789-001@abcdefghij:001" message = await channel.get_message(serial) ``` + +```go +rest, err := ably.NewREST(ably.WithKey("{{API_KEY}}")) +if err != nil { + panic(err) +} +channel := rest.Channels.Get("updates:example") + +// Example serial; for example from the `serial` property of a `Message` you previously received +serial := "0123456789-001@abcdefghij:001" + +message, err := channel.GetMessage(context.Background(), serial) +if err != nil { + panic(err) +} +_ = message +``` ## Get message versions @@ -800,6 +896,24 @@ serial = "0123456789-001@abcdefghij:001" page = await channel.getMessageVersions(serial) print("Found " + len(page.items) + " versions"); ``` + +```go +rest, err := ably.NewREST(ably.WithKey("{{API_KEY}}")) +if err != nil { + panic(err) +} +channel := rest.Channels.Get("updates:example") + +// Example serial; for example from the `serial` property of a `Message` you previously received +serial := "0123456789-001@abcdefghij:001" + +pages := channel.GetMessageVersions(serial, nil) +page, err := pages.Next(context.Background()) +if err != nil { + panic(err) +} +fmt.Printf("Found %d versions\n", len(page.Items)) +``` ## Message version structure From 9f8d31efe584fd28ebb02b89482214b9195e3ddc Mon Sep 17 00:00:00 2001 From: Lewis Marshall Date: Fri, 15 May 2026 18:58:54 +0100 Subject: [PATCH 2/2] fixup! Add Go examples for message updates, deletes, and appends --- src/pages/docs/messages/updates-deletes.mdx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pages/docs/messages/updates-deletes.mdx b/src/pages/docs/messages/updates-deletes.mdx index 3c3de4103b..651efa35be 100644 --- a/src/pages/docs/messages/updates-deletes.mdx +++ b/src/pages/docs/messages/updates-deletes.mdx @@ -907,12 +907,20 @@ channel := rest.Channels.Get("updates:example") // Example serial; for example from the `serial` property of a `Message` you previously received serial := "0123456789-001@abcdefghij:001" -pages := channel.GetMessageVersions(serial, nil) -page, err := pages.Next(context.Background()) +pages, err := channel.GetMessageVersions(serial, nil).Pages(context.Background()) if err != nil { panic(err) } -fmt.Printf("Found %d versions\n", len(page.Items)) +for pages.Next(context.Background()) { + versions := pages.Items() + fmt.Printf("Found %d versions on this page\n", len(versions)) + for _, msg := range versions { + fmt.Printf(" %s: %v\n", msg.Serial, msg.Data) + } +} +if err := pages.Err(); err != nil { + panic(err) +} ```