Custom Retriever
Simple retriever
To create a custom retriever you must have a struct
that implements the Retriever
interface.
type Retriever interface {
Retrieve(ctx context.Context) ([]byte, error)
}
The Retrieve
function is supposed to load the file and to return a []byte
of your flag configuration file.
You can check existing Retriever
(file,
s3, ...) to have an idea on how to do build your own.
Initializable retriever
Sometimes you need to initialize your retriever before using it. For example, if you want to connect to a database, you need to initialize the connection before using it.
To help you with that, you can use the InitializableRetriever
interface.
The only difference with the Retriever
interface is that the Init
func of your retriever will be called at the start of the application and the Shutdown
func will be called when closing GO Feature Flag.
type InitializableRetriever interface {
Retrieve(ctx context.Context) ([]byte, error)
Init(ctx context.Context, logger *fflog.FFLogger) error
Shutdown(ctx context.Context) error
Status() retriever.Status
}
To avoid any issue to call the Retrieve
function before the Init
function, you have to manage the status of your retriever.
GO Feature Flag will try to call the Retrieve
function only if the status is RetrieverStatusReady
.