Documentation
¶
Overview ¶
Package ffclient aids adding instrumentation to have feature flags in your app without any backend server.
Summary ¶
This package and its subpackages contain bits of code to have an easy feature flag solution with no complex installation to do on your infrastructure and without using 3rd party vendor for this.
The ffclient package provides the entry point - initialization and the basic method to get your flags value.
Before using the module you need to initialized it this way:
func main() {
err := ffclient.Init(ffclient.Config{
PollingInterval: 3 * time.Second,
HTTPRetriever: &httpretriever.Retriever{
URL: "http://example.com/flag-config.yaml",
},
})
defer ffclient.Close()
...
This example will load a file from an HTTP endpoint and will refresh the flags every 3 seconds.
Now you can evalute your flags anywhere in your code.
func main() {
...
user := ffuser.NewUser("user-unique-key")
hasFlag, _ := ffclient.BoolVariation("test-flag", user, false)
if hasFlag {
//flag "test-flag" is true for the user
} else {
// flag "test-flag" is false for the user
}
...
nolint: dupl
Index ¶
- func AllFlagsState(user ffuser.User) flagstate.AllFlags
- func BoolVariation(flagKey string, user ffuser.User, defaultValue bool) (bool, error)
- func Close()
- func Float64Variation(flagKey string, user ffuser.User, defaultValue float64) (float64, error)
- func GetCacheRefreshDate() time.Time
- func GetFlagsFromCache() (map[string]flag.Flag, error)
- func Init(config Config) error
- func IntVariation(flagKey string, user ffuser.User, defaultValue int) (int, error)
- func JSONArrayVariation(flagKey string, user ffuser.User, defaultValue []interface{}) ([]interface{}, error)
- func JSONVariation(flagKey string, user ffuser.User, defaultValue map[string]interface{}) (map[string]interface{}, error)
- func StringVariation(flagKey string, user ffuser.User, defaultValue string) (string, error)
- type Config
- type DataExporter
- type GoFeatureFlag
- func (g *GoFeatureFlag) AllFlagsState(user ffuser.User) flagstate.AllFlags
- func (g *GoFeatureFlag) BoolVariation(flagKey string, user ffuser.User, defaultValue bool) (bool, error)
- func (g *GoFeatureFlag) Close()
- func (g *GoFeatureFlag) Float64Variation(flagKey string, user ffuser.User, defaultValue float64) (float64, error)
- func (g *GoFeatureFlag) GetCacheRefreshDate() time.Time
- func (g *GoFeatureFlag) GetFlagsFromCache() (map[string]flag.Flag, error)
- func (g *GoFeatureFlag) IntVariation(flagKey string, user ffuser.User, defaultValue int) (int, error)
- func (g *GoFeatureFlag) JSONArrayVariation(flagKey string, user ffuser.User, defaultValue []interface{}) ([]interface{}, error)
- func (g *GoFeatureFlag) JSONVariation(flagKey string, user ffuser.User, defaultValue map[string]interface{}) (map[string]interface{}, error)
- func (g *GoFeatureFlag) RawVariation(flagKey string, user ffuser.User, sdkDefaultValue interface{}) (model.RawVarResult, error)
- func (g *GoFeatureFlag) StringVariation(flagKey string, user ffuser.User, defaultValue string) (string, error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AllFlagsState ¶ added in v0.17.0
AllFlagsState return the values of all the flags for a specific user. If valid field is false it means that we had an error when checking the flags.
func BoolVariation ¶
BoolVariation return the value of the flag in boolean. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value.
func Close ¶
func Close()
Close the component by stopping the background refresh and clean the cache.
func Float64Variation ¶
Float64Variation return the value of the flag in float64. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value.
func GetCacheRefreshDate ¶ added in v0.22.0
GetCacheRefreshDate gives the date of the latest refresh of the cache
func GetFlagsFromCache ¶ added in v0.24.0
GetFlagsFromCache returns all the flags present in the cache with their current state when calling this method. If cache hasn't been initialized, an error reporting this is returned.
func Init ¶
Init the feature flag component with the configuration of ffclient.Config
func main() {
err := ffclient.Init(ffclient.Config{
PollingInterval: 3 * time.Second,
Retriever: &httpretriever.Retriever{
URL: "http://example.com/flag-config.yaml",
},
})
defer ffclient.Close()
func IntVariation ¶
IntVariation return the value of the flag in int. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value.
func JSONArrayVariation ¶
func JSONArrayVariation(flagKey string, user ffuser.User, defaultValue []interface{}) ([]interface{}, error)
JSONArrayVariation return the value of the flag in []interface{}. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value.
func JSONVariation ¶
func JSONVariation( flagKey string, user ffuser.User, defaultValue map[string]interface{}, ) (map[string]interface{}, error)
JSONVariation return the value of the flag in map[string]interface{}. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value.
func StringVariation ¶
StringVariation return the value of the flag in string. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value.
Types ¶
type Config ¶
type Config struct {
// PollingInterval (optional) Poll every X time
// The minimum possible is 1 second
// Default: 60 seconds
PollingInterval time.Duration
// Logger (optional) logger use by the library
// Default: No log
Logger *log.Logger
// Context (optional) used to call other services (HTTP, S3 ...)
// Default: context.Background()
Context context.Context
// Environment (optional), can be checked in feature flag rules
// Default: ""
Environment string
// Retriever is the component in charge to retrieve your flag file
Retriever retriever.Retriever
// Notifiers (optional) is the list of notifiers called when a flag change
Notifiers []notifier.Notifier
// FileFormat (optional) is the format of the file to retrieve (available YAML, TOML and JSON)
// Default: YAML
FileFormat string
// DataExporter (optional) is the configuration where we store how we should output the flags variations results
DataExporter DataExporter
// StartWithRetrieverError (optional) If true, the SDK will start even if we did not get any flags from the retriever.
// It will serve only default values until the retriever returns the flags.
// The init method will not return any error if the flag file is unreachable.
// Default: false
StartWithRetrieverError bool
// Offline (optional) If true, the SDK will not try to retrieve the flag file and will not export any data.
// No notification will be send neither.
// Default: false
Offline bool
}
Config is the configuration of go-feature-flag. You should also have a retriever to specify where to read the flags file.
type DataExporter ¶ added in v0.10.0
type DataExporter struct {
// FlushInterval is the interval we are waiting to export the data.
// example: if you set your FlushInterval to 1 minutes, we will send
// the data every minute unless we reach the max event in cache before.
FlushInterval time.Duration
// MaxEventInMemory is the maximum number of event you keep in the cache
// before sending the data to the Exporter.
// We will send the data when the MaxEventInMemory is reach or if we have
// waited the FlushInterval.
MaxEventInMemory int64
// Exporter is the configuration of your exporter.
// You can see all available exporter in the exporter package.
Exporter dataexporter.Exporter
}
DataExporter is the configuration of your export target.
type GoFeatureFlag ¶ added in v0.6.0
type GoFeatureFlag struct {
// contains filtered or unexported fields
}
GoFeatureFlag is the main object of the library it contains the cache, the config and the update.
func New ¶ added in v0.6.0
func New(config Config) (*GoFeatureFlag, error)
New creates a new go-feature-flag instance that retrieve the config from a YAML file and return everything you need to manage your flags.
func (*GoFeatureFlag) AllFlagsState ¶ added in v0.17.0
func (g *GoFeatureFlag) AllFlagsState(user ffuser.User) flagstate.AllFlags
AllFlagsState return a flagstate.AllFlags that contains all the flags for a specific user.
func (*GoFeatureFlag) BoolVariation ¶ added in v0.6.0
func (g *GoFeatureFlag) BoolVariation(flagKey string, user ffuser.User, defaultValue bool) (bool, error)
BoolVariation return the value of the flag in boolean. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value. Note: Use this function only if you are using multiple go-feature-flag instances.
func (*GoFeatureFlag) Close ¶ added in v0.6.0
func (g *GoFeatureFlag) Close()
Close wait until thread are done
func (*GoFeatureFlag) Float64Variation ¶ added in v0.6.0
func (g *GoFeatureFlag) Float64Variation(flagKey string, user ffuser.User, defaultValue float64) (float64, error)
Float64Variation return the value of the flag in float64. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value. Note: Use this function only if you are using multiple go-feature-flag instances.
func (*GoFeatureFlag) GetCacheRefreshDate ¶ added in v0.22.0
func (g *GoFeatureFlag) GetCacheRefreshDate() time.Time
GetCacheRefreshDate gives the date of the latest refresh of the cache
func (*GoFeatureFlag) GetFlagsFromCache ¶ added in v0.24.0
func (g *GoFeatureFlag) GetFlagsFromCache() (map[string]flag.Flag, error)
GetFlagsFromCache returns all the flags present in the cache with their current state when calling this method. If cache hasn't been initialized, an error reporting this is returned.
func (*GoFeatureFlag) IntVariation ¶ added in v0.6.0
func (g *GoFeatureFlag) IntVariation(flagKey string, user ffuser.User, defaultValue int) (int, error)
IntVariation return the value of the flag in int. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value. Note: Use this function only if you are using multiple go-feature-flag instances.
func (*GoFeatureFlag) JSONArrayVariation ¶ added in v0.6.0
func (g *GoFeatureFlag) JSONArrayVariation( flagKey string, user ffuser.User, defaultValue []interface{}, ) ([]interface{}, error)
JSONArrayVariation return the value of the flag in []interface{}. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value. Note: Use this function only if you are using multiple go-feature-flag instances.
func (*GoFeatureFlag) JSONVariation ¶ added in v0.6.0
func (g *GoFeatureFlag) JSONVariation( flagKey string, user ffuser.User, defaultValue map[string]interface{}, ) (map[string]interface{}, error)
JSONVariation return the value of the flag in map[string]interface{}. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value. Note: Use this function only if you are using multiple go-feature-flag instances.
func (*GoFeatureFlag) RawVariation ¶ added in v0.22.2
func (g *GoFeatureFlag) RawVariation(flagKey string, user ffuser.User, sdkDefaultValue interface{}, ) (model.RawVarResult, error)
RawVariation return the raw value of the flag (without any types). This raw result is mostly used by software built on top of go-feature-flag such as go-feature-flag relay proxy. If you are using directly the library you should avoid calling this function. Note: Use this function only if you are using multiple go-feature-flag instances.
func (*GoFeatureFlag) StringVariation ¶ added in v0.6.0
func (g *GoFeatureFlag) StringVariation(flagKey string, user ffuser.User, defaultValue string) (string, error)
StringVariation return the value of the flag in string. An error is return if you don't have init the library before calling the function. If the key does not exist we return the default value. Note: Use this function only if you are using multiple go-feature-flag instances.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
migrationcli
command
|
|
|
relayproxy
command
|
|
|
relayproxy/docs
Package docs GENERATED BY SWAG; DO NOT EDIT This file was generated by swaggo/swag
|
Package docs GENERATED BY SWAG; DO NOT EDIT This file was generated by swaggo/swag |
|
wasm
module
|
|
|
examples
|
|
|
data_export_file
command
|
|
|
data_export_googlecloudstorage
command
|
|
|
data_export_s3
command
|
|
|
demo
command
|
|
|
retriever_configmap
command
|
|
|
retriever_file
command
|
|
|
retriever_github
command
|
|
|
retriever_http
command
|
|
|
rollout_experimentation
command
|
|
|
rollout_progressive
command
|
|
|
rollout_scheduled
command
|
|
|
lint_flag_programmatically
module
|
|
|
Package exporter defines the data exporter of go-feature-flag
|
Package exporter defines the data exporter of go-feature-flag |
|
Package ffuser defines the go-feature-flag model for user properties.
|
Package ffuser defines the go-feature-flag model for user properties. |
|
modules
|
|
|
core
module
|
|
|
evaluation
module
|
|
|
Package testutils is a generated GoMock package.
|
Package testutils is a generated GoMock package. |