--- title: Go SDK sort: 120 section-id: client-sdks keywords: Go, Golang, SDK, client, connection pool, query builder, pgx description: The NeuralDB Go SDK — installation, connection pooling, and vector query builder language: en --- # Go SDK Built on `pgx`, the high-performance PostgreSQL driver for Go. ## Installation ```bash go get github.com/neuraldb/neuraldb-go ``` Requires Go 1.21+. ## Connecting ```go client, err := neuraldb.Connect(ctx, "postgresql://neuraldb:password@localhost:5432/mydb") if err != nil { log.Fatal(err) } defer client.Close(ctx) ``` ### Connection Pool ```go config, _ := pgxpool.ParseConfig(os.Getenv("NEURALDB_URL")) config.MaxConns = 20 config.MinConns = 5 pool, _ := neuraldb.NewPool(ctx, config) ``` ## Working with Vectors ```go v := types.NewVector([]float32{0.023, -0.187, 0.412}) func InsertDocument(ctx context.Context, pool *neuraldb.Pool, doc Document) error { _, err := pool.Exec(ctx, `INSERT INTO documents (id, content, embedding) VALUES ($1, $2, $3)`, doc.ID, doc.Content, doc.Embedding, ) return err } func SemanticSearch(ctx context.Context, pool *neuraldb.Pool, queryEmbedding []float32, limit int) ([]SearchResult, error) { qv := types.NewVector(queryEmbedding) rows, err := pool.Query(ctx, ` SELECT id, content, 1 - (embedding <=> $1) AS similarity FROM documents WHERE embedding IS NOT NULL ORDER BY embedding <=> $1 LIMIT $2 `, qv, limit) if err != nil { return nil, err } defer rows.Close() var results []SearchResult for rows.Next() { var r SearchResult rows.Scan(&r.ID, &r.Content, &r.Similarity) results = append(results, r) } return results, rows.Err() } ``` ## Transactions ```go pool.BeginTxFunc(ctx, pgx.TxOptions{}, func(tx pgx.Tx) error { for _, doc := range docs { _, err := tx.Exec(ctx, `INSERT INTO documents (content, embedding) VALUES ($1, $2)`, doc.Content, doc.Embedding, ) if err != nil { return err } } _, err := tx.Exec(ctx, `UPDATE stats SET doc_count = doc_count + $1`, len(docs)) return err }) ```