This repository houses the Go SDK for use with Optimizely Feature Experimentation and Optimizely Full Stack (legacy).
Optimizely Feature Experimentation is an A/B testing and feature management tool for product development teams that enables you to experiment at every step. Using Optimizely Feature Experimentation allows for every feature on your roadmap to be an opportunity to discover hidden insights. Learn more at Optimizely.com, or see the developer documentation.
Optimizely Rollouts is free feature flags for development teams. You can easily roll out and roll back features in any application without code deploys, mitigating risk for every feature on your roadmap.
Refer to the Go SDK's developer documentation for detailed instructions on getting started with using the SDK.
Requires Golang version:
SDK Version | Required Golang Version |
---|---|
v2.0.0 | 1.21.0 or higher |
< v2.0.0 | 1.13 or higher |
go get github.com/optimizely/go-sdk/v2
go get github.com/optimizely/go-sdk/v2
cd $GOPATH/src/github.com/optimizely/go-sdk/v2
go install
NOTE:
We practice trunk-based development, and as such our default branch, master
might not always be the most stable. We do tag releases on Github and you can pin your installation to those particular release versions. One way to do this is to use Go Modules for managing external dependencies:
module mymodule
go 1.21.0
require (
github.com/optimizely/go-sdk/v2 v2.0.0
)
If you are already using go.mod
in your application you can run the following:
go mod edit -require github.com/optimizely/go-sdk/v2@v2.0.0
NOTE:
go get github.com/optimizely/go-sdk/v2/...
or
go get github.com/optimizely/go-sdk/v2/pkg
will install it as a package to pkg directory, rather than src directory. It could be useful for future development and vendoring.
See the example file in examples/main.go.
import optly "github.com/optimizely/go-sdk/v2"
import "github.com/optimizely/go-sdk/v2/client"
// Simple one-line initialization with the SDK key
optlyClient, err := optly.Client("SDK_KEY")
// You can also instantiate with a hard-coded datafile using our client factory method
optimizelyFactory := &client.OptimizelyFactory {
Datafile: []byte("datafile_string"),
}
optlyClient, err = optimizelyFactory.Client()
import (
optly "github.com/optimizely/go-sdk/v2"
)
// instantiate a client
client, err := optly.Client("SDK_KEY")
// User attributes are optional and used for targeting and results segmentation
attributes := map[string]interface{}{
"state": "California",
"likes_donuts": true,
}
user := client.CreateUserContext("optimizely end user", attributes)
options := []decide.OptimizelyDecideOptions{decide.IncludeReasons}
decision := user.Decide("my_flag", options)
var variationKey string
if variationKey = decision.VariationKey; variationKey == "" {
fmt.Printf("[decide] error: %v", decision.Reasons)
return
}
if variationKey == "control" {
// Execute code for control variation
} else if variationKey == "treatment" {
// Execute code for treatment variation
}
Run
make test
Please see CONTRIBUTING.
This software is distributed with code from the following open source projects:
murmur3 Copyright 2013, Sébastien Paolacci. License (BSD-3 Clause): https://github.com/twmb/murmur3/blob/master/LICENSE
uuid Copyright (c) 2009, 2014 Google Inc. All rights reserved. License (BSD-3 Clause): https://github.com/google/uuid/blob/master/LICENSE
testify Copyright (c) 2012-2018 Mat Ryer and Tyler Bunnell. License (MIT): https://github.com/stretchr/testify/blob/master/LICENSE
json-iterator Copyright (c) 2016 json-iterator License (MIT): https://github.com/json-iterator/go/blob/master/LICENSE
subset Copyright (c) 2015, Facebook, Inc. All rights reserved. License (BSD): https://github.com/facebookarchive/subset/blob/master/license
profile Copyright (c) 2013 Dave Cheney. All rights reserved. License (BSD): https://github.com/pkg/profile/blob/master/LICENSE
sync Copyright (c) 2009 The Go Authors. All rights reserved. https://github.com/golang/sync/blob/master/LICENSE
opentelemetry-go Copyright The OpenTelemetry Authors License (Apache-2.0): https://github.com/open-telemetry/opentelemetry-go/blob/main/LICENSE