optimizely

package module
v2.0.0 Latest Latest
Warning

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

Go to latest
Published: Jan 22, 2024 License: Apache-2.0 Imports: 2 Imported by: 0

README

Optimizely Go SDK

Go Report Card Coverage Status

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.

Get Started

Refer to the Go SDK's developer documentation for detailed instructions on getting started with using the SDK.

Requirements

Requires Golang version:

SDK Version Required Golang Version
v2.0.0 1.21.0 or higher
< v2.0.0 1.13 or higher
Install the SDK
Install from github:
go get github.com/optimizely/go-sdk/v2
Install from source:
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:

Install using go.mod:
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.

Use the Go SDK

See the example file in examples/main.go.

Initialization
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()
Make Decisions
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 
}

SDK Development

Unit Tests

Run

make test 
Contributing

Please see CONTRIBUTING.

Credits

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

Other Optimizely SDKs

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Client

func Client(sdkKey string, options ...client.OptionFunc) (*client.OptimizelyClient, error)

Client returns an OptimizelyClient instantiated with the given key and options

func UserContext

func UserContext(userID string, attributes map[string]interface{}) entities.UserContext

UserContext is a helper method for creating a user context

Types

This section is empty.

Directories

Path Synopsis
pkg
client
Package client has client definitions
Package client has client definitions
config
Package config //
Package config //
config/datafileprojectconfig
Package datafileprojectconfig //
Package datafileprojectconfig //
config/datafileprojectconfig/entities
Package entities has entity definitions
Package entities has entity definitions
Package mappers ...
decide
Package decide has error definitions for decide api
Package decide has error definitions for decide api
decision
Package decision //
Package decision //
decision/bucketer
Package bucketer //
Package bucketer //
decision/evaluator
Package evaluator //
Package evaluator //
decision/evaluator/matchers
Package matchers //
Package matchers //
Package utils //
decision/reasons
Package reasons //
Package reasons //
entities
Package entities //
Package entities //
event
Package event //
Package event //
logging
Package logging //
Package logging //
metrics
Package metrics //
Package metrics //
notification
Package notification //
Package notification //
odp
Package odp //
Package odp //
odp/cache
Package cache //
Package cache //
odp/config
Package config //
Package config //
odp/event
Package event //
Package event //
odp/segment
Package segment //
Package segment //
odp/utils
Package utils //
Package utils //
optimizelyjson
Package optimizelyjson //
Package optimizelyjson //
registry
Package registry is the global access point for retrieving instances of services by SDK Key //
Package registry is the global access point for retrieving instances of services by SDK Key //
tracing
Package tracing //
Package tracing //
utils
Package utils //
Package utils //

Jump to

Keyboard shortcuts

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