flagsmith

package module
v4.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 26, 2025 License: BSD-3-Clause Imports: 22 Imported by: 1

README

Go GoReportCard GoDoc

Flagsmith Go SDK

Flagsmith allows you to manage feature flags and remote config across multiple projects, environments and organisations.

This is the SDK for go for https://flagsmith.com/.

Adding to your project

For full documentation visit https://docs.flagsmith.com/clients/server-side?language=go.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Getting Help

If you encounter a bug or feature request we would like to hear about it. Before you submit an issue please search existing issues in order to prevent duplicates.

Get in touch

If you have any questions about our projects you can email support@flagsmith.com.

Documentation

Index

Constants

View Source
const (
	// Number of seconds to wait for a request to
	// complete before terminating the request.
	DefaultTimeout = 10 * time.Second

	// Default base URL for the API.
	DefaultBaseURL = "https://edge.api.flagsmith.com/api/v1/"

	BulkIdentifyMaxCount   = 100
	DefaultRealtimeBaseUrl = "https://realtime.flagsmith.com/"
)
View Source
const (
	OptionWithHTTPClient  = "WithHTTPClient"
	OptionWithRestyClient = "WithRestyClient"
)
View Source
const AnalyticsEndpoint = "analytics/flags/"
View Source
const AnalyticsTimerInMilli = 10 * 1000
View Source
const EnvironmentKeyHeader = "X-Environment-Key"

Variables

This section is empty.

Functions

func WithEvaluationContext

func WithEvaluationContext(ctx context.Context, ec EvaluationContext) context.Context

Returns context with provided EvaluationContext instance set.

Types

type AnalyticsProcessor

type AnalyticsProcessor struct {
	// contains filtered or unexported fields
}

func NewAnalyticsProcessor

func NewAnalyticsProcessor(ctx context.Context, client *resty.Client, baseURL string, timerInMilli *int, log Logger) *AnalyticsProcessor

func (*AnalyticsProcessor) Flush

func (a *AnalyticsProcessor) Flush(ctx context.Context) error

func (*AnalyticsProcessor) TrackFeature

func (a *AnalyticsProcessor) TrackFeature(featureName string)

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client provides various methods to query Flagsmith API.

func NewClient

func NewClient(apiKey string, options ...Option) *Client

NewClient creates instance of Client with given configuration.

func (*Client) BulkIdentify

func (c *Client) BulkIdentify(ctx context.Context, batch []*IdentityTraits) error

BulkIdentify can be used to create/overwrite identities(with traits) in bulk NOTE: This method only works with Edge API endpoint.

func (*Client) GetEnvironmentFlags

func (c *Client) GetEnvironmentFlags(ctx context.Context) (f Flags, err error)

GetEnvironmentFlags calls GetFlags using the current environment as the EvaluationContext. Equivalent to GetFlags(ctx, nil).

func (*Client) GetEnvironmentFlagsFromAPI

func (c *Client) GetEnvironmentFlagsFromAPI(ctx context.Context) (Flags, error)

GetEnvironmentFlagsFromAPI tries to contact the Flagsmith API to get the latest environment data. Will return an error in case of failure or unexpected response.

func (*Client) GetFlags

func (c *Client) GetFlags(ctx context.Context, ec *EvaluationContext) (f Flags, err error)

GetFlags evaluates the feature flags within an EvaluationContext.

When flag evaluation fails, the value of each Flag is determined by the default flag handler from WithDefaultHandler, if one was provided.

Flags are evaluated remotely by the Flagsmith API by default. To evaluate flags locally, instantiate a client using WithLocalEvaluation.

func (*Client) GetIdentityFlags

func (c *Client) GetIdentityFlags(ctx context.Context, identifier string, traits []*Trait) (f Flags, err error)

GetIdentityFlags calls GetFlags using this identifier and traits as the EvaluationContext.

func (*Client) GetIdentityFlagsFromAPI

func (c *Client) GetIdentityFlagsFromAPI(ctx context.Context, identifier string, traits []*Trait) (Flags, error)

GetIdentityFlagsFromAPI tries to contact the Flagsmith API to get the latest identity flags. Will return an error in case of failure or unexpected response.

func (*Client) GetIdentitySegments

func (c *Client) GetIdentitySegments(identifier string, traits []*Trait) ([]*segments.SegmentModel, error)

Returns an array of segments that the given identity is part of.

func (*Client) UpdateEnvironment

func (c *Client) UpdateEnvironment(ctx context.Context) error

type EnvironmentEvaluationContext

type EnvironmentEvaluationContext struct {
	// APIKey is an identifier for this environment. It is also known as the environment ID or client-side SDK key.
	APIKey string `json:"api_key"`
}

EnvironmentEvaluationContext represents a Flagsmith environment used in an EvaluationContext. It is ignored if the evaluating Client was created using WithLocalEvaluation.

type EvaluationContext

type EvaluationContext struct {
	Environment *EnvironmentEvaluationContext `json:"environment,omitempty"`
	Identity    *IdentityEvaluationContext    `json:"identity,omitempty"`
	Feature     *FeatureEvaluationContext     `json:"feature,omitempty"`
}

EvaluationContext represents a context in which feature flags can be evaluated. Flagsmith flags are always evaluated in an EnvironmentEvaluationContext, with an optional IdentityEvaluationContext.

func GetEvaluationContextFromCtx

func GetEvaluationContextFromCtx(ctx context.Context) (ec EvaluationContext, ok bool)

Retrieve EvaluationContext instance from context.

func NewEvaluationContext

func NewEvaluationContext(identifier string, traits map[string]interface{}) EvaluationContext

func NewTransientEvaluationContext

func NewTransientEvaluationContext(identifier string, traits map[string]interface{}) EvaluationContext

type FeatureEvaluationContext

type FeatureEvaluationContext struct {
	Name string `json:"name"`
}

FeatureEvaluationContext is not yet implemented.

type Flag

type Flag struct {
	Enabled     bool
	Value       interface{}
	IsDefault   bool
	FeatureID   int
	FeatureName string
}

type Flags

type Flags struct {
	// contains filtered or unexported fields
}

func (*Flags) AllFlags

func (f *Flags) AllFlags() []Flag

Returns an array of all flag objects.

func (*Flags) GetFeatureValue

func (f *Flags) GetFeatureValue(featureName string) (interface{}, error)

Returns the value of a particular flag.

func (*Flags) GetFlag

func (f *Flags) GetFlag(featureName string) (Flag, error)

Returns a specific flag given the name of the feature.

func (*Flags) IsFeatureEnabled

func (f *Flags) IsFeatureEnabled(featureName string) (bool, error)

Returns a boolean indicating whether a particular flag is enabled.

type FlagsmithAPIError

type FlagsmithAPIError struct {
	Msg                string
	Err                error
	ResponseStatusCode int
	ResponseStatus     string
}

func (FlagsmithAPIError) Error

func (e FlagsmithAPIError) Error() string

type FlagsmithClientError

type FlagsmithClientError struct {
	// contains filtered or unexported fields
}

func (FlagsmithClientError) Error

func (e FlagsmithClientError) Error() string

type IdentityEvaluationContext

type IdentityEvaluationContext struct {
	Identifier *string                            `json:"identifier,omitempty"`
	Traits     map[string]*TraitEvaluationContext `json:"traits,omitempty"`
	Transient  *bool                              `json:"transient,omitempty"`
}

IdentityEvaluationContext represents a Flagsmith identity within a Flagsmith environment, used in an EvaluationContext. Traits are application-defined key-value pairs which can be used as part of the flag evaluation context. Flagsmith will not persist Transient identities when flags are remotely evaluated.

type IdentityTraits

type IdentityTraits struct {
	Identifier string   `json:"identifier"`
	Traits     []*Trait `json:"traits"`
	Transient  bool     `json:"transient,omitempty"`
}

type LocalFileHandler

type LocalFileHandler struct {
	// contains filtered or unexported fields
}

func NewLocalFileHandler

func NewLocalFileHandler(environmentDocumentPath string) (*LocalFileHandler, error)

NewLocalFileHandler creates a new LocalFileHandler with the given path.

func (*LocalFileHandler) GetEnvironment

func (handler *LocalFileHandler) GetEnvironment() *environments.EnvironmentModel

type Logger

type Logger interface {
	// Errorf logs an error message with the given format and arguments.
	Errorf(format string, v ...interface{})

	// Warnf logs a warning message with the given format and arguments.
	Warnf(format string, v ...interface{})

	// Debugf logs a debug message with the given format and arguments.
	Debugf(format string, v ...interface{})
}

Logger is the interface used for logging by flagsmith client. This interface defines the methods that a logger implementation must implement. It is used to abstract logging and enable clients to use any logger implementation they want.

type OfflineHandler

type OfflineHandler interface {
	GetEnvironment() *environments.EnvironmentModel
}

type Option

type Option func(c *Client)

func WithAnalytics

func WithAnalytics(ctx context.Context) Option

WithAnalytics enables tracking of the usage of the Feature flags.

The goroutine responsible for asynchronously uploading the locally stored cache uses the context provided here, which means that if it expires the background process will exit.

func WithBaseURL

func WithBaseURL(url string) Option

func WithCustomHeaders

func WithCustomHeaders(headers map[string]string) Option

func WithDefaultHandler

func WithDefaultHandler(handler func(string) (Flag, error)) Option

func WithEnvironmentRefreshInterval

func WithEnvironmentRefreshInterval(interval time.Duration) Option

func WithErrorHandler

func WithErrorHandler(handler func(handler *FlagsmithAPIError)) Option

WithErrorHandler provides a way to handle errors that occur during update of an environment.

func WithHTTPClient added in v4.3.0

func WithHTTPClient(httpClient *http.Client) Option

func WithLocalEvaluation

func WithLocalEvaluation(ctx context.Context) Option

WithLocalEvaluation enables local evaluation of the Feature flags.

The goroutine responsible for asynchronously updating the environment makes use of the context provided here, which means that if it expires the background process will exit.

func WithLogger

func WithLogger(logger Logger) Option

Allows the client to use any logger that implements the `Logger` interface.

func WithOfflineHandler

func WithOfflineHandler(handler OfflineHandler) Option

WithOfflineHandler returns an Option function that sets the offline handler.

func WithOfflineMode

func WithOfflineMode() Option

WithOfflineMode returns an Option function that enables the offline mode. NOTE: before using this option, you should set the offline handler.

func WithPolling added in v4.2.0

func WithPolling() Option

WithPolling makes it so that the client will poll for updates even when WithRealtime is used.

func WithProxy

func WithProxy(proxyURL string) Option

WithProxy returns an Option function that sets the proxy(to be used by internal resty client). The proxyURL argument is a string representing the URL of the proxy server to use, e.g. "http://proxy.example.com:8080".

func WithRealtime added in v4.1.0

func WithRealtime() Option

WithRealtime returns an Option function that enables real-time updates for the Client. NOTE: Before enabling real-time updates, ensure that local evaluation is enabled.

func WithRealtimeBaseURL added in v4.1.0

func WithRealtimeBaseURL(url string) Option

WithRealtimeBaseURL returns an Option function for configuring the real-time base URL of the Client.

func WithRemoteEvaluation

func WithRemoteEvaluation() Option

func WithRequestTimeout

func WithRequestTimeout(timeout time.Duration) Option

func WithRestyClient added in v4.3.0

func WithRestyClient(restyClient *resty.Client) Option

func WithRetries

func WithRetries(count int, waitTime time.Duration) Option

func WithSlogLogger added in v4.2.0

func WithSlogLogger(logger *slog.Logger) Option

WithSlogLogger allows the client to use a slog.Logger for logging.

type Trait

type Trait struct {
	TraitKey   string      `json:"trait_key"`
	TraitValue interface{} `json:"trait_value"`
	Transient  bool        `json:"transient,omitempty"`
}

func (*Trait) ToTraitModel

func (t *Trait) ToTraitModel() *traits.TraitModel

type TraitEvaluationContext

type TraitEvaluationContext struct {
	Transient *bool       `json:"transient,omitempty"`
	Value     interface{} `json:"value"`
}

TraitEvaluationContext represents a single trait value used within an IdentityEvaluationContext. A Transient trait will not be persisted.

func NewTraitEvaluationContext

func NewTraitEvaluationContext(value interface{}, transient bool) TraitEvaluationContext

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL