Getting Started
This page walks through installing Ferret as a Go dependency, running a query, and working with the result.
Installation
Add the module to your project:
go get github.com/MontFerret/ferret/v2
Running a query
The simplest way to execute a query is engine.Run. It compiles the source, runs it in a fresh session, and returns the encoded output.
ferret.NewAnonymousSource is convenient for one-shot queries. Use ferret.NewSource(name, content) when the source name should appear in compilation errors and debugger output. Both constructors return ferret.Source values.
Native applications normally use the root ferret package for sources, engine and session options, log levels, module contracts, parameter values, program formats, and output. Import a package under pkg only when using the specialized API owned by that package.
Compiling and reusing a plan
When the same query runs many times — with different parameters, in different goroutines, or on a schedule — compile it once and create sessions from the resulting plan:
The plan manages an internal pool of virtual machines. Sessions borrow a VM from the pool and return it on close, so creating many sessions from the same plan is efficient.
Passing parameters
Parameters let the host application inject values into a query at runtime. In FQL, parameters are referenced with the @ prefix.
Engine-level parameters apply to every session:
Session-level parameters override engine defaults for a single execution:
You can inspect which parameters a compiled query declares:
See Parameters for the full parameter API.
Handling errors
Ferret returns standard Go errors. Compilation errors include source location information:
Runtime errors from query execution are returned by session.Run:
Context cancellation and timeouts work as expected:
The VM observes cancellation at structural execution boundaries rather than polling every native operation. Blocking host functions, iterators, queries, streams, and other context-aware capabilities receive this same context and must observe it while they retain control. Cancellation and deadline errors propagate to the caller and cannot be suppressed by FQL error recovery.