Compartilhar via


Habilitar recursos condicionais com um filtro personalizado em um aplicativo Web Go Gin

Os sinalizadores de recursos podem usar filtros de recursos para habilitar os recursos condicionalmente. Para saber mais sobre os filtros de recursos, consulte Habilitar os recursos condicionais com os filtros de recursos.

O exemplo usado neste guia baseia-se no aplicativo Web Go Gin introduzido no início rápido do gerenciamento de recursos. Antes de continuar, conclua o guia de início rápido para criar um aplicativo Web Go Gin com um sinalizador de recursos Beta. Depois de concluído, você deve adicionar um filtro de recurso personalizado ao sinalizador de recurso Beta no repositório de Configuração de Aplicativos.

Neste guia, você aprenderá a implementar um filtro de recurso personalizado e usar o filtro de recursos para habilitar os recursos condicionalmente.

Prerequisites

Implementar um filtro de recurso personalizado

Você adicionou um filtro de recurso personalizado chamado Aleatório com um parâmetro Porcentagem para o sinalizador de recurso Beta nos requisitos prévios. Em seguida, você implementará o filtro de recursos para habilitar o sinalizador de recurso Beta com base na chance definida pelo parâmetro Percentage.

  1. Crie um arquivo random_filter.go com o código a seguir:

    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    
        "github.com/microsoft/Featuremanagement-Go/featuremanagement"
    )
    
    type RandomFilter struct{}
    
    func (f *RandomFilter) Name() string {
        return "Random"
    }
    
    func (f *RandomFilter) Evaluate(evalCtx featuremanagement.FeatureFilterEvaluationContext, appCtx any) (bool, error) {
        percentage, ok := evalCtx.Parameters["Percentage"].(float64)
        if !ok {
            return false, fmt.Errorf("invalid parameter type for Percentage: expected float64, got %T", evalCtx.Parameters["Percentage"])
        }
    
        rand.Seed(time.Now().UnixNano())
        randomValue := rand.Intn(100)
        return randomValue <= int(percentage), nil
    }
    

    Você adicionou um RandomFilter struct que implementa a FeatureFilter interface da featuremanagement biblioteca. A FeatureFilter interface tem dois métodos:

    • Name() retorna o nome do filtro Aleatório, que corresponde ao nome do filtro definido no sinalizador de recurso Beta na Configuração de Aplicativos do Azure.
    • Evaluate() é chamado sempre que um flag de funcionalidade é avaliado. Um filtro de recurso habilita um sinalizador de recurso retornando true.
  2. Atualize o arquivo main.go para registrar o RandomFilter ao criar o gerenciador de funcionalidades:

    // ...existing code...
    
    func main() {
        ctx := context.Background()
    
        // Load Azure App Configuration
        appConfig, err := loadAzureAppConfiguration(ctx)
        if err != nil {
            log.Fatalf("Error loading Azure App Configuration: %v", err)
        }
    
        // Create feature flag provider
        featureFlagProvider, err := azappconfig.NewFeatureFlagProvider(appConfig)
        if err != nil {
            log.Fatalf("Error creating feature flag provider: %v", err)
        }
    
        // Register custom filters
        options := &featuremanagement.Options{
            Filters: []featuremanagement.FeatureFilter{
                &RandomFilter{},
            },
        }
    
        // Create feature manager with custom filters
        featureManager, err := featuremanagement.NewFeatureManager(featureFlagProvider, options)
        if err != nil {
            log.Fatalf("Error creating feature manager: %v", err)
        }
    
        // ...existing code...
    }
    

Filtro de recurso em ação

Reinicie o aplicativo e atualize o navegador algumas vezes. Sem alternar manualmente o sinalizador de recurso, o menu Beta é exibido aleatoriamente com base no percentual definido.

Captura de tela do aplicativo Web Gin com o menu Beta oculto.

Captura de tela do aplicativo Web Gin com o menu Beta.

Next steps

Para saber mais sobre os filtros de recursos incorporados, consulte os documentos a seguir.

Para a visão geral completa das funcionalidades da biblioteca de gerenciamento de funcionalidades Go, consulte o documento a seguir.