Go · Quickstart

Quickstart

3.0.0-rc.1 · 4c3e5023

Declare a module in go.mod:

module usearch_example

go 1.24

Write 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.go

Always call Reserve(capacity) before the first write.