Clients
Hazelcast Go Client
Hazelcast is a feature-rich and developer-friendly in-memory caching solution for your Go applications.
- Access Hazelcast data structures plus distributed queues, topics, and more with the Hazelcast Go Client.
- Declarative configuration support via JSON.
- SQL support.
- High-performance aggregation functions, such as sum, average, max, and min, for Hazelcast Map entries. They can run in parallel for each partition and are highly optimized for speed and low-memory consumption.

Quick Start + Download
Quick Start
Use the following command to install the Hazelcast Go client:
go get github.com/hazelcast/hazelcast-go-client
Next steps:
- Visit our Official Github repo.
- Read our API documentation.
- Checkout some code samples.
- Join our Slack channel.
Downloads
Version | Downloads | Documentation |
---|---|---|
Hazelcast IMDG Go Client 1.4.0 (latest)
03/17/2023
|
||
Hazelcast IMDG Go Client 1.3.2
02/10/2023
|
||
Hazelcast IMDG Go Client 1.3.1
10/06/2022
|
||
Hazelcast IMDG Go Client 1.2.0
06/02/2023
|
||
For all downloads please see the Download Archives |
Code Samples
package main import ( "context" "fmt" "github.com/hazelcast/hazelcast-go-client" ) func main() { ctx := context.TODO() // Start the client with defaults. client, err := hazelcast.StartNewClient(ctx) if err != nil { panic(err) } // Get a reference to the map. myMap, err := client.GetMap(ctx, "my-map") if err != nil { panic(err) } // Set a value in the map. err = myMap.Set(ctx, "some-key", "some-value") if err != nil { panic(err) } // Get the value back and print it. value, err := myMap.Get(ctx, "some-key") if err != nil { panic(err) } fmt.Println("Got the value back:", value) }
package main import ( "context" "fmt" "github.com/hazelcast/hazelcast-go-client" ) func main() { ctx := context.TODO() // Start the client with defaults. client, err := hazelcast.StartNewClient(ctx) if err != nil { panic(err) } // Get a reference to the replicated map. myMap, err := client.GetReplicatedMap(ctx, "my-replicated-map") if err != nil { panic(err) } // Put a value in the map and retrieve the previous value. oldValue, err := myMap.Put(ctx, "some-key", "some-value") if err != nil { panic(err) } fmt.Println("Previous value:", oldValue) // Get the value back and print it. value, err := myMap.Get(ctx, "some-key") if err != nil { panic(err) } fmt.Println("Got the value back:", value) }
package main import ( "context" "fmt" "github.com/hazelcast/hazelcast-go-client" ) func main() { ctx := context.TODO() // Start the client with defaults. client, err := hazelcast.StartNewClient(ctx) if err != nil { panic(err) } // Get a reference to the multi map. myMap, err := client.GetMultiMap(ctx, "my-multi-map") if err != nil { panic(err) } // Put values in the map with the same key. err = myMap.PutAll(ctx, "some-key", "some-value-1", "some-value-2", "some-value-3") if err != nil { panic(err) } // Get the values back and print it. values, err := myMap.Get(ctx, "some-key") if err != nil { panic(err) } fmt.Println("Got the values back:", values) }
package main import ( "context" "fmt" "github.com/hazelcast/hazelcast-go-client" ) func main() { ctx := context.TODO() // Start the client with defaults. client, err := hazelcast.StartNewClient(ctx) if err != nil { panic(err) } // Get a reference to the set. mySet, err := client.GetSet(ctx, "my-set") if err != nil { panic(err) } // Add items to set. // Note that value1 is added twice. changed, err := mySet.AddAll(ctx, "value1", "value2", "value1", "value3") if err != nil { panic(err) } fmt.Println("Was the set changed?", changed) // Print contents of the set items, err := mySet.GetAll(ctx) if err != nil { panic(err) } // Get the items back and print them. fmt.Println("Got the items back:", items) }
package main import ( "context" "fmt" "github.com/hazelcast/hazelcast-go-client" ) func main() { ctx := context.TODO() // Start the client with defaults. client, err := hazelcast.StartNewClient(ctx) if err != nil { panic(err) } // Get a reference to the list. myList, err := client.GetList(ctx, "my-list") if err != nil { panic(err) } _, err = myList.AddAll(ctx, "tic", "toc") if err != nil { panic(err) } // Get and print list items. items, err := myList.GetAll(ctx) if err != nil { panic(err) } fmt.Println("List items:", items) }
package main import ( "context" "fmt" "github.com/hazelcast/hazelcast-go-client" ) func main() { ctx := context.TODO() // Start the client with defaults. client, err := hazelcast.StartNewClient(ctx) if err != nil { panic(err) } // Get a reference to the queue. myQueue, err := client.GetQueue(ctx, "my-queue") if err != nil { panic(err) } // Add an item to the queue if space is available (non-blocking). added, err := myQueue.Add(ctx, "item 1") if err != nil { panic(err) } fmt.Println("Added?", added) // Get the head of the queue if available and print item. item, err := myQueue.Poll(ctx) if err != nil { panic(err) } fmt.Println("Got item:", item) }
package main import ( "context" "fmt" "github.com/hazelcast/hazelcast-go-client" ) // messageListener handles incoming messages to the topic. func messageListener(event *hazelcast.MessagePublished) { fmt.Println("Received message: ", event.Value) } func main() { ctx := context.TODO() // Start the client with defaults. client, err := hazelcast.StartNewClient(ctx) if err != nil { panic(err) } // Get a reference to the queue. myTopic, err := client.GetTopic(ctx, "my-topic") if err != nil { panic(err) } // Add a message listener to the topic. _, err = myTopic.AddMessageListener(ctx, messageListener) if err != nil { panic(err) } // Publish messages to topic for i := 0; i < 10; i++ { err = myTopic.Publish(ctx, fmt.Sprintf("Message %d", i)) if err != nil { panic(err) } } // Shutdown the client. client.Shutdown(ctx) }
package main import ( "context" "fmt" "github.com/hazelcast/hazelcast-go-client" "github.com/hazelcast/hazelcast-go-client/predicate" "github.com/hazelcast/hazelcast-go-client/serialization" ) func main() { ctx := context.TODO() // Start the client with defaults. client, err := hazelcast.StartNewClient(ctx) if err != nil { panic(err) } // Get a reference to the map. myMap, err := client.GetMap(ctx, "my-map") if err != nil { panic(err) } // Populate the map, error handling is omitted here for brevity _ = myMap.Set(ctx, "key-1", serialization.JSON(`{"property: 5}`)) _ = myMap.Set(ctx, "key-2", serialization.JSON(`{"property": 10}`)) _ = myMap.Set(ctx, "key-3", serialization.JSON(`{"property": 15}`)) // Filter the entries in the map based on a predicate and print those. pred := predicate.And(predicate.Greater("property", 8), predicate.Less("property", 12)) entries, err := myMap.GetEntrySetWithPredicate(ctx, pred) if err != nil { panic(err) } fmt.Println(entries) }
Features Implemented for this Client
Data Structures | Go Client |
---|---|
Map | |
Queue | |
Set | |
List | |
MultiMap | |
Replicated Map | |
Ring Buffer | |
Topic | |
Reliable Topic | |
JCache | N/A |
Cardinality Estimator |
Concurrency Primitives | Go Client |
---|---|
Lock | |
Condition | |
Semaphore | |
AtomicLong | |
AtomicReference | |
ID Generator | |
CountDownLatch | |
CRDT PN Counter | |
Flake ID Generator |
Transactions | Go Client |
---|---|
TxnMap | |
TxnMultiMap | |
TxnQueue | |
TxnList | |
TxnSet |
Query | Go Client |
---|---|
SQL | |
Query (Predicates) | |
Paging Predicates | |
Partition Predicates | |
Built-in Predicates | |
Continuous Query Caching | N/A |
Listener with Predicate | |
Projections | |
Fast Aggregations |
Near Cache | Go Client |
---|---|
Near Cache Support | |
HD Memory | N/A |
Preload Cache from Last Used | |
Eventual Consistency Control |
Configuration | Go Client |
---|---|
Declarative Configuration (XML/JSON/YAML) | |
Programmatic Configuration | |
Client Configuration Import | |
Fail Fast on Invalid Configuration |
Security | Go Client |
---|---|
SSL Support | |
XA Transactions | |
Mutual Authentication | |
Username/Password Authentication | |
Custom Authentication Modules |
Management Center | Go Client |
---|---|
Management Center Integration / Awareness | |
Client Near Cache Stats | |
Client Runtime Stats | |
Client Operating System Stats |
Cloud | Go Client |
---|---|
Hazelcast Viridian services | |
Kubernetes | |
AWS | |
Azure | |
Google Cloud Platform | |
Pivotal Cloud Foundry | |
Docker | |
Apache jclouds | |
Consul | |
etcd | |
Eureka | |
Heroku | |
Zookeeper |
Infrastructure | Go Client |
---|---|
Open Client Protocol | |
Smart Client | |
Unisocket Client | |
Lifecycle Service | |
HeartBeat | |
Backup Acknowledgement to Client | |
Diagnostics |
Serialization | Go Client |
---|---|
DataSerializable | N/A |
IdentifiedDataSerializable | |
Portable Serialization | |
Custom Serialization | |
Global Serialization |
Client Connectivity | Go Client |
---|---|
Connection Strategy | |
Connection Retry | |
Blue/Green Deployments and Disaster Recovery |