Example usage of the Go SDK
A brief code example of how to use the Optimizely Feature Experimentation Go SDK to evaluate feature flags, activate A/B tests, or feature tests.
Once you have installed an SDK, import the Optimizely Feature Experimentation library into your code, get your Optimizely Feature Experimentation project's datafile, and instantiate a client. Then, you can use the client to evaluate flag rules, including A/B tests and flag deliveries.
This example demonstrates the basic usage of each of these concepts:
-
Evaluate a flag with the key
product_sort
using the Decide method. As a side effect, the Decide function also sends a decision event to Optimizely Feature Experimentation to record that the current user has been exposed to the experiment. -
Conditionally execute your feature code. You have a couple of options:
- Fetch the flag-enabled state, then check a configuration variable on the flag called
sort_method
. The SDK evaluates your flag rules and determines what flag variation the user is in, and therefore which sort method variable they should see. - Fetch on the flag variation, then run 'control' or 'treatment' code.
- Use event tracking to track an event called
purchased
. This conversion event measures the impact of an experiment. Using the Track Event method, the purchase is automatically attributed back to the running A/B test for which we made a decision, and the SDK sends a network request to Optimizely Feature Experimentation through the customizable event dispatcher so Optimizely can count it in your results page.
import optly "github.com/optimizely/go-sdk" // for v2: "github.com/optimizely/go-sdk/v2"
optimizely_client, err := optly.Client("SDK_KEY_HERE")
if err != nil {
// handle the err
}
// create a user and decide a flag rule (such as an A/B test) for them
user := optimizely_client.CreateUserContext("user123", map[string]interface{}{"logged_in": true})
decision := user.Decide("product_sort", []decide.OptimizelyDecideOptions{})
var variationKey string
if variationKey = decision.VariationKey; variationKey == "" {
fmt.Printf("[decide] error: %v", decision.Reasons)
return
}
// execute code based on flag enabled state
enabled := decision.Enabled
if enabled {
// get flag variable values
var value1 string
decision.Variables.GetValue("sort_method", &value1)
// or:
value2 := decision.Variables.ToMap()["sort_method"].(string)
}
// or execute code based on flag variation:
if variationKey == "control" {
// Execute code for control variation
} else if variationKey == "treatment" {
// Execute code for treatment variation
}
// Track a user event
user.TrackEvent("purchased", nil)
For a more detailed and runnable code example, see the Quickstart.
Updated 10 months ago