On this page

For AI agents: a documentation index is available at /docs/llms.txt. Append .md to any page URL for markdown, or send Accept: text/markdown.

実験 Go SDK

Amplitude ExperimentのサーバーサイドGo SDK実装に関する公式ドキュメント。

このドキュメントは、リモートローカルでの評価用に2つのセクションに分かれています。

リモート評価

リモート評価を使用して、ユーザーのバリアントの取得を実装します。

インストール

go getを使用してGo Server SDKをインストールします。

bash
go get github.com/amplitude/experiment-go-server

クイックスタート

  1. 実験用クライアントを初期化する
  2. ユーザーのバリアントを取得
  3. フラグのバリアントにアクセスする
go
// (1) Initialize the local evaluation client with a server deployment key.
client := remote.Initialize("<DEPLOYMENT_KEY>", nil)
// (2) Fetch variants for a user
user := &experiment.User{
  UserId:   "user@company.com",
  DeviceId: "abcdefg",
  UserProperties: map[string]interface{}{
    "premium": true,
  },
}
variants, err := client.Fetch(user)
if err != nil {
  // Handle error
}
// (3) Access a flag's variant
variant := variants["<FLAG_KEY>"]
if variant.Value == "on" {
    // Flag is on
} else {
    // Flag is off
}

初期化する

スタートアップ時にサーバーでSDKクライアントを初期化します。apiKeyパラメーターに渡すデプロイメントキー引数は、アナリティクスイベントの送信先となるプロジェクトと同じプロジェクト内に存在する必要があります。

go
func Initialize(apiKey string, config *Config) *Client
go
client := remote.Initialize("<DEPLOYMENT_KEY>", nil)

設定

初期化時にSDKクライアントを設定します。

EUデータセンター

AmplitudeのEUデータセンターを使用する場合は、初期化時にServerZoneオプションを設定してください。

取得

ユーザーのバリアントを取得し、結果を返します。 この関数は、SDKクライアントの初期化に使用されたデプロイメントに関連付けられているフラグについて、ユーザーを リモートで評価します

go
func (c *Client) Fetch(user *experiment.User) (map[string]experiment.Variant, error)
go
user := &experiment.User{
    UserId:   "user@company.com",
    DeviceId: "abcdefg",
    UserProperties: map[string]interface{}{
        "premium": true,
    },
}
variants, err := client.Fetch(user)
if err != nil {
    // Handle error
}

ユーザーのバリアントを取得した後、特定のフラグのバリアントにアクセスできます。

go
variant := variants["<FLAG_KEY>"]
if variant.Value == "on" {
    // Flag is on
} else {
    // Flag is off
}

オプション付きでV2を取得する

オプションを持つユーザーのバリアントを取得し、結果を返します。この関数は、SDKクライアントの初期化に使用されたデプロイメントに関連付けられているフラグについて、ユーザーを リモートで評価します

go
func (c *Client) FetchV2WithOptions(user *experiment.User, fetchOptions *experiment.FetchOptions) (map[string]experiment.Variant, error)
go
user := &experiment.User{
    UserId:   "user@company.com",
    DeviceId: "abcdefg",
    UserProperties: map[string]interface{}{
        "premium": true,
    },
}
variants, err := client.FetchV2WithOptions(user, &experiment.FetchOptions{
    TracksAssignment: true,
    TracksExposure:   true,
})
if err != nil {
    // Handle error
}

FetchOptions

ローカル評価

ローカル評価を通じてユーザーのバリアントを評価することを実装します。 ローカル評価を使用する予定がある場合は、そのトレードオフを理解しておく必要があります。

インストール

go getを使用してGo Server SDKをインストールします。

bash
go get github.com/amplitude/experiment-go-server

クイックスタート

  1. ローカル評価クライアントを初期化します。
  2. ローカル評価クライアントを起動します。
  3. ユーザーを評価します。
go
// (1) Initialize the local evaluation client with a server deployment key.
client := local.Initialize("<DEPLOYMENT_KEY>", &local.Config{
 // (Recommended) Enable local evaluation cohort targeting.
 CohortSyncConfig: &local.CohortSyncConfig {
   ApiKey: "<API_KEY>",
   SecretKey: "<SECRET_KEY>"
 }
})
// (2) Start the local evaluation client.
err := client.Start()
if err != nil {
  panic(err)
}
  // (3) Evaluate a user.
user := &experiment.User{DeviceId: "abcdefg"}
variants, err := client.EvaluateV2(user, nil)
if err != nil {
  panic(err)
}

初期化する

ローカル評価クライアントを初期化します。

サーバーデプロイメントキー

ローカル評価フラグ設定にアクセスするには、サーバーデプロイメントキーを使用してローカル評価クライアントを初期化する必要があります。

go
func Initialize(apiKey string, config *Config) *Client

フラグストリーミング

StreamUpdates設定を使用すると、FlagConfigPollingIntervalミリ秒ごとにポーリングするのではなく、フラグ設定の更新をSDKにプッシュできます(デフォルトはfalse)。通常、保存後に SDK が更新を受信するまでの時間は1秒未満です。 ストリーミングに失敗した場合、SDKはポーリングに戻ります。FlagConfigPollingInterval構成を設定することで、フラグ設定の変更が反映されるまでの時間(デフォルト30秒)を指定できます。この設定はフォールバックにも適用されます。

設定

初期化時にSDKクライアントを設定します。

EUデータセンター

AmplitudeのEUデータセンターを使用する場合は、初期化時にServerZoneオプションを設定してください。

設定

AssignmentConfig

ExposureConfig

CohortSyncConfig

スタート

ローカル評価クライアントを起動し、評価用のローカル評価モードのフラグ設定を事前に取得し、設定された間隔でフラグ設定ポーラーを開始します。

go
func (c *Client) Start() error

Evaluate()を呼び出す前に、Start()の結果を待ってフラグ設定の準備が完了していることを確認してください。

go
err := client.Start()
if err != nil {
    panic(err)
}

評価する

Start()で事前に取得されたフラグを使用して、評価ロジックを実行します。ユーザーオブジェクト引数にevaluateを指定する必要があります。フラグバリアントの特定のサブセットのみが必要な場合は、オプションでフラグキーの配列を渡すことができます。

露出の追跡

露出の追跡を有効にするためにExposureConfigを設定します。次に、EvaluateV2WithOptions()を呼び出す際に、EvaluateOptionsの内のTracksExposuretrueに設定します。

go
func (c *Client) EvaluateV2(user *experiment.User, flagKeys []string) (map[string]experiment.Variant, error)
go
// The user to evaluate
user := &experiment.User{DeviceId: "abcdefg"}
// Evaluate all flag variants
allVariants, err := client.EvaluateV2(user, nil)
if err != nil {
    // Handle Error
}
// Evaluate a specific subset of flag variants
specificVariants, err := client.EvaluateV2(user, []string{
    "<FLAG_KEY_1>",
    "<FLAG_KEY_2>",
})
// Access a variant
variant := allVariants["<FLAG_KEY>"]
if variant.Value == "on" {
    // Flag is on
} else {
    // Flag is off
}

オプションを使用してV2を評価する

Start()で事前に取得されたフラグを使用して評価ロジックを実行します。ユーザーオブジェクト引数にevaluateを指定する必要があります。フラグバリアントの特定のサブセットのみが必要な場合は、オプションでフラグキーの配列を渡すことができます。

go
func (c *Client) EvaluateV2WithOptions(user *experiment.User, options *EvaluateOptions) (map[string]experiment.Variant, error)
go
user := &experiment.User{DeviceId: "abcdefg"}
variants, err := client.EvaluateV2WithOptions(user, &local.EvaluateOptions{
    FlagKeys: []string{"flag-key-1", "flag-key-2"},
    TracksExposure: true,
})
if err != nil {
    // Handle Error
}

EvaluateOptions

ローカル評価コホートターゲティング

1.7.0バージョン以降、ローカル評価SDKクライアントは、ローカル評価ターゲット設定用のコホートのダウンロードをサポートしています。このサポートを有効にするには、初期化時にアナリティクスApiKeyおよびSecretKeyCohortSyncConfigオプションを設定する必要があります。

go
client := local.Initialize("<DEPLOYMENT_KEY>", &local.Config{
  // (Recommended) Enable local evaluation cohort targeting.
  CohortSyncConfig: &local.CohortSyncConfig {
    ApiKey: "<API_KEY>",
    SecretKey: "<SECRET_KEY>"
  }
})

カスタムログ記録

LogLevel設定を使用してログの冗長性を制御するか、独自のロガーを統合するためのLoggerProviderインターフェイスを実装してください。

ログレベル

SDK は次のログレベルをサポートしています。

  • Verbose: ディープデバッグのための詳細なログ記録
  • Debug: 開発とトラブルシューティングのためのログ記録
  • Info: 一般的な情報メッセージ
  • Warn: 警告メッセージ
  • Error:エラーメッセージ(デフォルト)
  • Disable:ログ記録なし

カスタムロガー

使用しているログソリューションと統合するため、LoggerProviderインターフェースを実装します。

go
import "github.com/amplitude/experiment-go-server/logger"
type MyCustomLogger struct {
    // Your logger implementation
}
func (l *MyCustomLogger) Verbose(message string, args ...interface{}) {
    // Implement verbose logging
}
func (l *MyCustomLogger) Debug(message string, args ...interface{}) {
    // Implement debug logging
}
func (l *MyCustomLogger) Info(message string, args ...interface{}) {
    // Implement info logging
}
func (l *MyCustomLogger) Warn(message string, args ...interface{}) {
    // Implement warn logging
}
func (l *MyCustomLogger) Error(message string, args ...interface{}) {
    // Implement error logging
}
// Initialize with custom logger
client := local.Initialize("<DEPLOYMENT_KEY>", &local.Config{
    LogLevel: logger.Debug,
    LoggerProvider: &MyCustomLogger{},
})

下位互換性

Debug設定フィールドは引き続きサポートされています。trueに設定されている場合、LogLevelDebugに上書きされます。

Was this helpful?