Declare a module in go.mod:
module usearch_example
go 1.24Write example.go:
package main
import (
"fmt"
"log"
usearch "github.com/unum-cloud/USearch/golang"
)
func main() {
const dimensions = 3
const entries = 100
options := usearch.DefaultDenseOptions()
options.Dimensions = dimensions
options.Metric = usearch.DenseMetricAngular
// Quantization also accepts ScalarF16, ScalarE5M2, ScalarE4M3, ScalarE3M2,
// ScalarE2M3, ScalarI8, ScalarU8 and ScalarU1x8.
options.Quantization = usearch.ScalarBF16
// A nil list of memory domains places a shard on every NUMA node.
index, err := usearch.DenseInitRam(options, nil)
if err != nil {
log.Fatal(err)
}
defer index.Close()
if err := index.Reserve(entries); err != nil {
log.Fatal(err)
}
keys := make([]usearch.Key, entries)
vectors := make([]float32, entries*dimensions)
for entry := range entries {
keys[entry] = usearch.KeyFromUint64(uint64(entry))
for dimension := range dimensions {
vectors[entry*dimensions+dimension] = float32(entry + dimension)
}
}
if err := index.Insert(keys, usearch.RowsOf(vectors, dimensions), nil); err != nil {
log.Fatal(err)
}
arena, err := usearch.NewArena(nil)
if err != nil {
log.Fatal(err)
}
defer arena.Close()
query := []float32{0.0, 1.0, 2.0}
matches, err := index.Search(usearch.RowsOf(query, dimensions), 3, arena, nil)
if err != nil {
log.Fatal(err)
}
found, distances, err := matches.Query(0)
if err != nil {
log.Fatal(err)
}
for rank := range found {
fmt.Println(found[rank], distances[rank])
}
}Fetch the package and run it:
go get github.com/unum-cloud/USearch/golang
go run example.goAlways call Reserve(capacity) before the first write.