← Cloudflare Flagship / flagship / sdk
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-запрос.