• Start

By Language

Golang

The documentation for embedding SurrealDB within Go can be found in the Go SDK and surrealdb.c.go documentation.

SurrealDB can be run as an embedded database within your Go application, allowing you to use SurrealDB without running a separate server process. This is ideal for desktop applications, testing, local development, and edge computing scenarios.

SurrealDB supports multiple types of embedded storage in Go:

  • In-memory database (mem://) - Fastest performance with data stored in RAM. Perfect for testing, caching, or temporary data. Data is lost when the connection closes.

  • File-based database (surrealkv:// or rocksdb://) - Persistent storage on disk using the SurrealKV storage engine. Data persists across connections and application restarts. The RocksDB backend requires a separate manual build detailed here

package main

import (
"context"
"fmt"
"log"

surrealdb "github.com/surrealdb/surrealdb.c.go"
)

type Person struct {
ID surrealdb.RecordID[string] `cbor:"id,omitempty"`
Name string `cbor:"name"`
Age int64 `cbor:"age"`
}

func main() {
ctx := context.Background()

db, err := surrealdb.Open(ctx, "mem://")
if err != nil {
log.Fatal(err)
}
defer db.Close()

db.Use(ctx, "test", "test")
db.Query(ctx, "CREATE $rid CONTENT $content", map[string]any{
"rid": surrealdb.NewRecordID("person", "alice"),
"content": Person{Name: "Alice", Age: 30},
})

results, _ := surrealdb.Query[Person](ctx, db, "SELECT * FROM person", nil)
for _, p := range results[0].Values() {
fmt.Printf("%s: %s (age %d)\n", p.ID, p.Name, p.Age)
}
}

For complete documentation, installation instructions, examples, best practices, and troubleshooting, see the Go SDK embedding guide.

Was this page helpful?