Este producto no es compatible con el sitio Datadog seleccionado. ().
Información general
En esta page (página) se describe cómo instrumentar tu aplicación de Go con el kit de desarrollo de software (SDK) de marcas de funciones de Datadog. El kit de desarrollo de software (SDK) de Go se integra con OpenFeature, un estándar abierto para la gestión de marcas de funciones y utiliza la configuración remota del rastreador de Datadog para recibir actualizaciones de marcas en tiempo real.
En esta guía se explica cómo instalar y habilitar el kit de desarrollo de software (SDK), crear un cliente de OpenFeature y evaluar las marcas de funciones en tu aplicación.
Requisitos previos
Antes de configurar el kit de desarrollo de software (SDK) de marcas de funciones de Go, asegúrate de que tengas:
Rastreador de Go de Datadogdd-trace (traza)-go versión 2.4.0 o posterior
Configura las siguientes variables de entorno:
# Obligatorio: Habilitar el proveedor de marcas de funcionesDD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED=true# Obligatorio: Identificación del servicioDD_SERVICE=<YOUR_SERVICE_NAME>
DD_ENV=<YOUR_ENVIRONMENT>
Instalación
Instala el paquete del proveedor de OpenFeature de Datadog:
go get github.com/DataDog/dd-trace-go/v2/openfeature
También necesitas el kit de desarrollo de software (SDK) de OpenFeature Go:
go get github.com/open-feature/go-sdk/openfeature
Inicializa el kit de desarrollo de software (SDK)
Inicia el rastreador Datadog y registra el proveedor Datadog OpenFeature. El rastreador debe iniciarse primero porque habilita la configuración remota, que entrega configuraciones de marcas a tu aplicación.
Bloqueo de la inicialización
Utiliza SetProviderAndWait para bloquear la evaluación hasta que se reciba la configuración inicial de las marcas. Esto asegura que las marcas estén listas antes de que tu aplicación comience a gestionar solicitudes.
packagemainimport("log""github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"ddopenfeature"github.com/DataDog/dd-trace-go/v2/openfeature""github.com/open-feature/go-sdk/openfeature")funcmain(){// Start the Datadog tracer (enables Remote Config)tracer.Start()defertracer.Stop()// Create the Datadog OpenFeature providerprovider,err:=ddopenfeature.NewDatadogProvider(ddopenfeature.ProviderConfig{})iferr!=nil{log.Fatalf("Failed to create provider: %v",err)}deferprovider.Shutdown()// Register the provider and wait for initialization (default 30s timeout)iferr:=openfeature.SetProviderAndWait(provider);err!=nil{log.Fatalf("Failed to set provider: %v",err)}// Create the OpenFeature clientclient:=openfeature.NewClient("my-service")// Your application code here}
Para especificar un tiempo de espera personalizado, utiliza SetProviderAndWaitWithContext:
ctx,cancel:=context.WithTimeout(context.Background(),10*time.Second)defercancel()iferr:=openfeature.SetProviderAndWaitWithContext(ctx,provider);err!=nil{log.Fatalf("Failed to set provider: %v",err)}
Inicialización no bloqueante
Utiliza SetProvider para registrar el proveedor sin esperar. Las evaluaciones de marcas devuelven valores predeterminados hasta que se reciba la configuración.
packagemainimport("log""github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"ddopenfeature"github.com/DataDog/dd-trace-go/v2/openfeature""github.com/open-feature/go-sdk/openfeature")funcmain(){// Start the Datadog tracer (enables Remote Config)tracer.Start()defertracer.Stop()// Create the Datadog OpenFeature providerprovider,err:=ddopenfeature.NewDatadogProvider(ddopenfeature.ProviderConfig{})iferr!=nil{log.Fatalf("Failed to create provider: %v",err)}deferprovider.Shutdown()// Register the provider without waitingopenfeature.SetProvider(provider)// Create the OpenFeature clientclient:=openfeature.NewClient("my-service")// Your application code here// Flag evaluations return defaults until configuration is received}
Crear un cliente
Crea un cliente de OpenFeature para evaluar las marcas. Puedes crear varios clientes con diferentes nombres para diferentes partes de tu aplicación:
// Create a client for your applicationclient:=openfeature.NewClient("my-service")
Definir el contexto de evaluación
Define un contexto de evaluación que identifique al usuario o la entidad a la que se dirigen las marcas. El contexto de evaluación incluye atributos utilizados para determinar qué variaciones de marcas deben devolverse:
evalCtx:=openfeature.NewEvaluationContext("user-123",// Targeting key (typically user ID)map[string]interface{}{"email":"user@example.com","country":"US","tier":"premium","age":25,},)
La clave de segmentación se utiliza para una distribución coherente del tráfico (porcentajes de lanzamiento). Los atributos adicionales permiten establecer reglas de segmentación, como “activar para usuarios de EE.UU.” o “activar para usuarios de nivel premium” en el ejemplo anterior.
Evaluar marcas
Después de configurar el proveedor y crear un cliente, puedes evaluar las marcas en toda la aplicación. La evaluación de marcas es local y rápida: el kit de desarrollo de software (SDK) utiliza datos de configuración almacenados en caché local, por lo que no se producen solicitudes de red durante la evaluación.
Cada marca se identifica mediante una clave (una cadena única) y puede evaluarse con un método con tipo que devuelve un valor del tipo esperado. Si la marca no existe o no puede evaluarse, el kit de desarrollo de software (SDK) devuelve el valor predeterminado proporcionado.
Marcas booleanas
Utiliza BooleanValue para las marcas que representan condiciones de activado/desactivado o true/false:
Para las marcas numéricos, utiliza IntValue o FloatValue. Son adecuadas cuando una función depende de un parámetro numérico como un límite, un porcentaje o un multiplicador:
Para datos estructurados, utiliza ObjectValue. Esto devuelve un valor que puede ser tipo-afirmado a mapas u otros tipos complejos:
config,err:=client.ObjectValue(ctx,"feature-config",map[string]interface{}{"maxRetries":3,"timeout":30,},evalCtx)iferr!=nil{log.Printf("Error evaluating flag: %v",err)}// Type assert to access the configurationifconfigMap,ok:=config.(map[string]interface{});ok{maxRetries:=configMap["maxRetries"]timeout:=configMap["timeout"]// Use configuration values}
Detalles de la evaluación de marcas
Si necesita algo más que el valor de la marca, utiliza los métodos *ValueDetails. Estos devuelven tanto el valor evaluado como los metadatos que explican la evaluación: