INTEGRITY Документация

Go SDK

SDK для Go предоставляет совместимый с OpenFeature серверный провайдер для приложений на Go. Он оценивает флаги по HTTP и не поддерживает привязку Cloudflare Workers.

Установка

Установка с помощью go get:

go get github.com/cloudflare/flagship/sdks/go

Настройка

Настройте провайдер, указав идентификатор приложения Flagship, идентификатор аккаунта Cloudflare и API-токен с разрешением Flagship Evaluate или Flagship App Evaluate.

package main

import (
	"context"
	"log"

	flagship "github.com/cloudflare/flagship/sdks/go"
	"github.com/open-feature/go-sdk/openfeature"
)

func main() {
	ctx := context.Background()

	provider, err := flagship.NewProvider(flagship.Options{
		AppID:     "<APP_ID>",
		AccountID: "<ACCOUNT_ID>",
		AuthToken: "<API_TOKEN>",
	})
	if err != nil {
		log.Fatal(err)
	}

	if err := openfeature.SetProviderAndWait(provider); err != nil {
		log.Fatal(err)
	}
	defer openfeature.Shutdown()

	client := openfeature.NewDefaultClient()
	evalCtx := openfeature.NewEvaluationContext("user-42", map[string]any{
		"plan": "enterprise",
	})

	enabled, err := client.BooleanValue(ctx, "new-checkout", false, evalCtx)
	if err != nil {
		log.Fatal(err)
	}

	log.Println("new-checkout:", enabled)
}

Типы флагов

SDK для Go поддерживает все серверные типы флагов OpenFeature.

enabled, _ := client.BooleanValue(ctx, "new-checkout", false, evalCtx)
variant, _ := client.StringValue(ctx, "homepage-hero", "control", evalCtx)
rate, _ := client.FloatValue(ctx, "sample-rate", 0.1, evalCtx)
limit, _ := client.IntValue(ctx, "upload-limit", 10, evalCtx)
config, _ := client.ObjectValue(ctx, "ui-config", map[string]any{"theme": "light"}, evalCtx)

Используйте *ValueDetails методы, если вам нужны причина, вариант, метаданные или коды ошибок.

Кеширование ответов

Поставщик может кэшировать результаты вычислений, чтобы не выполнять сетевой запрос повторно для одинаковых пар флаг и контекст. По умолчанию кэширование отключено, включить его можно, задав CacheTTL:

provider, err := flagship.NewProvider(flagship.Options{
	AppID:        "<APP_ID>",
	AccountID:    "<ACCOUNT_ID>",
	AuthToken:    "<API_TOKEN>",
	CacheTTL:     30 * time.Second, // values may be up to this stale
	CacheMaxSize: 1000,             // LRU-evicted beyond this many entries
})

Каждая запись кэша определяется ключом флага, типом флага и полным контекстом оценки, поэтому разные контексты никогда не используют общее кэшированное значение. При попадании в кэш результат возвращается с reason == openfeature.CachedReason.

Отключённые флаги, ошибки и несоответствия типов никогда не кэшируются. Поскольку актуальность определяется TTL, изменение флага в Flagship вступает в силу только после истечения срока действия записи.

Кэш относится к экземпляру провайдера, защищён мьютексом для параллельного использования и очищается при Shutdown.

Параметры настройки

Опция Описание
AppID ID приложения Flagship.
AccountID Обязательно вместе с AppID.
BaseURL Переопределение базового URL. Значение по умолчанию: https://api.cloudflare.com.
AuthToken Добавляет Authorization: Bearer <token> к каждому запросу.
Headers Статические заголовки. Явные Authorization переопределяет AuthToken.
HeadersFactory Динамические заголовки для каждого запроса. Значения переопределяют Headers и AuthToken.
HTTPClient Пользовательский HTTP-клиент.
Timeout Тайм-аут на одну попытку. По умолчанию 5 секунд.
Retries Попытки повтора при временных ошибках. По умолчанию 1, максимум 10.
DisableRetries Отключает повторные попытки при значении true.
RetryDelay Задержка между повторными попытками. По умолчанию 1 секунда, но не более 30 секунд.
CacheTTL Включает кэширование ответов в памяти при значении больше 0. Кэшированные значения могут устаревать на срок до указанной длительности.
CacheMaxSize Максимальное количество записей в кеше. При превышении этого предела применяется вытеснение LRU. По умолчанию 1000, если CacheTTL задан.
Logging Включает логирование отладки и ошибок. По умолчанию отключено.
Logger Необязательно slog-совместимый логгер. Использует стандартный slog логгер, если не задан.
Hooks Хуки OpenFeature на уровне провайдера.

Контекст оценки

Атрибуты контекста передаются как параметры запроса URL. Поддерживаются строки, числовые типы, булевы значения и time.Time. nil значения пропускаются. Map, slice, struct и другие сложные значения возвращают INVALID_CONTEXT через OpenFeature и не вызывают HTTP-запрос.