← Cloudflare Flagship / flagship / sdk
Go SDK
SDK pro Go poskytuje serverového poskytovatele kompatibilního s OpenFeature pro aplikace v Go. Vyhodnocuje příznaky přes HTTP a nepodporuje binding Cloudflare Workers.
Instalace
Nainstalujte pomocí go get:
go get github.com/cloudflare/flagship/sdks/goNastavení
Nakonfigurujte poskytovatele pomocí ID aplikace Flagship, ID účtu Cloudflare a API token s oprávněním Flagship Evaluate nebo 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)
}Typy příznaků
SDK pro Go podporuje všechny serverové typy příznaků 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)Použijte *ValueDetails metody, pokud potřebujete důvod, variantu, metadata nebo chybové kódy.
Cachování odpovědí
Poskytovatel může ukládat vyhodnocení do mezipaměti, aby se předešlo síťovému round-tripu u opakovaných dvojic flag/context. Ukládání do mezipaměti je ve výchozím stavu vypnuté a zapíná se nastavením 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
})Každý záznam v mezipaměti je klíčován klíčem příznaku, jeho typem a celým kontextem vyhodnocení, takže odlišné kontexty nikdy nesdílejí stejnou hodnotu z mezipaměti. Zásah do mezipaměti vrátí reason == openfeature.CachedReason.
Vypnuté příznaky, chyby a neshody typů se nikdy neukládají do mezipaměti. Platnost záznamu je řízena hodnotou TTL, takže změna příznaku ve Flagship se projeví až po jeho vypršení.
Mezipaměť je vázaná na instanci poskytovatele, chráněná mutexem pro souběžné použití a vymazává se při Shutdown.
Možnosti konfigurace
| Možnost | Popis |
|---|---|
AppID |
ID aplikace Flagship. |
AccountID |
Vyžadováno s AppID. |
BaseURL |
Přepsání základní URL adresy. Výchozí hodnota je https://api.cloudflare.com. |
AuthToken |
Přidá Authorization: Bearer <token> ke každému požadavku. |
Headers |
Statické hlavičky. Explicitní Authorization přepisuje AuthToken. |
HeadersFactory |
Dynamické hlavičky pro jednotlivé požadavky. Hodnoty přepisují Headers a AuthToken. |
HTTPClient |
Vlastní HTTP klient. |
Timeout |
Časový limit na jeden pokus. Výchozí hodnota je 5 sekund. |
Retries |
Počet opakování při dočasných chybách. Výchozí hodnota je 1, maximálně 10. |
DisableRetries |
Opakování se vypnou při nastavení na true. |
RetryDelay |
Prodleva mezi opakováními. Výchozí hodnota je 1 sekunda, maximální hodnota je 30 sekund. |
CacheTTL |
Při hodnotě větší než 0 zapíná ukládání odpovědí do mezipaměti v paměti. Uložené hodnoty mohou být zastaralé až o tuto dobu. |
CacheMaxSize |
Maximální počet položek v mezipaměti. Nad tímto limitem se položky vyřazují metodou LRU. Výchozí hodnota je 1000, pokud CacheTTL je nastaven. |
Logging |
Zapne ladicí a chybové logování. Ve výchozím nastavení je vypnuto. |
Logger |
Volitelné slog-kompatibilní logger. Používá výchozí slog logger, pokud není nastaveno. |
Hooks |
OpenFeature hooks na úrovni poskytovatele. |
Kontext vyhodnocení
Atributy kontextu se odesílají jako parametry URL dotazu. Podporované hodnoty jsou řetězce, číselné typy, booleovské hodnoty a time.Time. nil hodnoty se přeskočí. Mapy, řezy, struktury a další komplexní hodnoty vrací INVALID_CONTEXT prostřednictvím OpenFeature a nevyvolávají HTTP požadavek.