GoLang SDK#

USearch for GoLang#

Installation#

Linux#

Download and install the Debian package from the latest release. Substitute <release_tag>, <arch>, and <usearch_version> with your settings.

wget https://github.com/unum-cloud/usearch/releases/download/<release_tag>/usearch_linux_<arch>_<usearch_version>.deb
dpkg -i usearch_<arch>_<usearch_version>.deb

Windows#

Run the winlibinstaller.bat script from the main repository in the folder where you will run go run. This will install the USearch library and include it in the same folder where the script was run.

.\usearch\winlibinstaller.bat

MacOS#

Download and unpack the zip archive from the latest release. Move the USearch library and the include file to their respective folders.

wget https://github.com/unum-cloud/usearch/releases/download/<release_tag>/usearch_macos_<arch>_<usearch_version>.zip
unzip usearch_macos_<arch>_<usearch_version>.zip
sudo mv libusearch_c.dylib /usr/local/lib && sudo mv usearch.h /usr/local/include

Quickstart#

  1. Create a go.mod file:

module usearch_example

go <go_version>
  1. Create an example.go:

package main

import (
    "fmt"
    usearch "github.com/unum-cloud/usearch/golang"
)

func main() {

    // Create Index
    vectorSize := 3
    vectorsCount := 100
    conf := usearch.DefaultConfig(uint(vectorSize))
    index, err := usearch.NewIndex(conf)
    if err != nil {
        panic("Failed to create Index")
    }
    defer index.Destroy()

    // Add to Index
    err = index.Reserve(uint(vectorsCount))
    for i := 0; i < vectorsCount; i++ {
        err = index.Add(usearch.Key(i), []float32{float32(i), float32(i + 1), float32(i + 2)})
        if err != nil {
            panic("Failed to add")
        }
    }

    // Search
    keys, distances, err := index.Search([]float32{0.0, 1.0, 2.0}, 3)
    if err != nil {
        panic("Failed to search")
    }
    fmt.Println(keys, distances)
}
  1. Get USearch:

go get github.com/unum-cloud/usearch/golang
  1. Run:

go run example.go

Serialization#

To save and load the index from disk, use the following methods:

err := index.Save("index.usearch")
if err != nil {
    panic("Failed to save index")
}

err = index.Load("index.usearch")
if err != nil {
    panic("Failed to load index")
}

err = index.View("index.usearch")
if err != nil {
    panic("Failed to view index")
}