Partilhar 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 recursos condicionalmente. Para saber mais sobre filtros de recursos, consulte Habilitar recursos condicionais com filtros de recursos.

O exemplo usado neste guia é baseado na aplicação web Go Gin introduzida no guia de início rápido de gestão de funcionalidades. Antes de prosseguir, conclua o guia de início rápido para criar uma aplicação web Go Gin com um sinalizador de recurso Beta. Depois de concluído, você deve adicionar um filtro de recurso personalizado ao sinalizador de recurso Beta em sua loja de configuração de aplicativos.

Neste guia, você aprenderá a implementar um filtro de recursos personalizado e usar o filtro de recursos para habilitar 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 pré-requisitos. Em seguida, você implementará o filtro de recursos para habilitar o sinalizador de recurso Beta com base na chance definida pelo parâmetro Percentagem .

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

    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 uma RandomFilter struct que implementa a FeatureFilter interface da featuremanagement biblioteca. A FeatureFilter interface tem dois métodos:

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

    // ...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 recursos em ação

Reinicie o aplicativo e atualize o navegador algumas vezes. Sem alternar manualmente o sinalizador de recurso, o menu Beta aparece aleatoriamente com base na porcentagem que você definiu.

Captura de ecrã da aplicação Web Gin com o menu Beta oculto.

Captura de ecrã da aplicação Web Gin com menu Beta.

Next steps

Para saber mais sobre os filtros de recursos internos, continue para os seguintes documentos.

Para obter o resumo completo dos recursos da biblioteca de gerenciamento de recursos Go, continue para o documento a seguir.