Go Provider
Get Started
An OpenFeature Provider is a pluggable integration layer that connects the OpenFeature SDK to a specific feature flag management system (e.g., VWO or custom in-house solutions). OpenFeature is an open-source standard for feature flagging, designed to provide a vendor-agnostic approach, enabling organizations to switch between feature flagging tools without rewriting application code.
This VWO OpenFeature Provider for Go helps you integrate Feature Experimentation systems into your Go-based applications.
NoteThis library is intended to be used in server-side contexts and has not been evaluated for use on mobile devices.
Requirements
Go 1.24
SDK Installation
go get github.com/wingify/vwo-openfeature-provider-goUsage
package main
import (
"context"
"fmt"
"log"
"github.com/open-feature/go-sdk/openfeature"
vwo "github.com/wingify/vwo-openfeature-provider-go/pkg"
)
func main() {
provider, err := vwo.NewVWOProviderWithConfig(map[string]interface{}{
"sdkKey": "<your-vwo-sdk-key>",
"accountId": "<your-vwo-account-id>",
})
if err != nil {
log.Fatalf("Failed to create VWO feature provider: %v", err)
}
openfeature.SetProviderAndWait(provider)
client := openfeature.NewClient("my-app")
// Evaluate a boolean flag. If no variableKey is provided, this returns flag enabled/disabled.
ctx := openfeature.NewEvaluationContext("unique-user-id", map[string]any{"variableKey": "booleanVariableKey"})
enabled, err := client.BooleanValue(context.Background(), "featureKey", false, ctx)
if err != nil {
log.Fatalf("Failed to get boolean value: %v", err)
}
fmt.Println("Enabled:", enabled)
// Evaluate typed variables by passing variableKey in the evaluation context
// String variable
ctx = openfeature.NewEvaluationContext("unique-user-id", map[string]any{"variableKey": "stringVariableKey"})
strVal, _ := client.StringValue(context.Background(), "featureKey", "default", ctx)
fmt.Println("String value:", strVal)
// Integer variable
ctx = openfeature.NewEvaluationContext("unique-user-id", map[string]any{"variableKey": "integerVariableKey"})
intVal, _ := client.IntValue(context.Background(), "featureKey", 0, ctx)
fmt.Println("Int value:", intVal)
// Float variable
ctx = openfeature.NewEvaluationContext("unique-user-id", map[string]any{"variableKey": "floatVariableKey"})
floatVal, _ := client.FloatValue(context.Background(), "featureKey", 0.0, ctx)
fmt.Println("Float value:", floatVal)
// JSON variable
ctx = openfeature.NewEvaluationContext("unique-user-id", map[string]any{"variableKey": "jsonVariableKey"})
jsonVal, _ := client.ObjectValue(context.Background(), "featureKey", map[string]any{}, ctx)
fmt.Println("JSON value:", jsonVal)
}API Details
API | Arguments | Argument Description | API Description |
|---|---|---|---|
|
| config: Configuration object containing: | Creates a new instance of |
|
| provider: The VWO provider instance responsible for flag evaluations. | Registers the VWO provider with OpenFeature and waits until it is ready. |
|
| name: A logical application or client name. | Creates a new OpenFeature client used to evaluate feature flags. |
|
| userID: Unique identifier for the user. attributes: Additional data (e.g., | Defines the evaluation context for feature flag resolution. |
|
| featureKey: The feature flag key. | Fetches the boolean value of a feature flag. |
|
| evalCtx must contain | Returns the string variable value. |
|
| evalCtx must contain | Fetches an integer variable value. |
|
| evalCtx must include | Fetches a floating-point variable. |
|
| evalCtx may contain | Fetches JSON variable values. |
Updated about 3 hours ago
