Condividi tramite


Abilitare le funzionalità condizionali con un filtro personalizzato in un'applicazione Web Go Gin

I flag di funzionalità possono usare filtri di funzionalità per abilitare le funzionalità in modo condizionale. Per altre informazioni sui filtri delle funzionalità, vedere Abilitare le funzionalità condizionali con i filtri delle funzionalità.

L'esempio usato in questa guida si basa sull'applicazione Web Go Gin introdotta nella guida introduttiva alla gestione delle funzionalità. Prima di continuare, completare la guida introduttiva per creare un'applicazione Web Go Gin con un flag di funzionalità Beta. Al termine, è necessario aggiungere un filtro di funzionalità personalizzato al flag di funzionalità Beta nell'archivio di Configurazione app.

In questa guida si apprenderà come implementare un filtro di funzionalità personalizzato e usare il filtro delle funzionalità per abilitare le funzionalità in modo condizionale.

Prerequisites

Implementare un filtro di funzionalità personalizzato

È stato aggiunto un filtro di funzionalità personalizzato denominato Random con un parametro Percentage per il flag di funzionalità Beta nei prerequisiti. Successivamente, si implementerà il filtro delle funzionalità per abilitare il flag di funzionalità Beta in base alla probabilità definita dal parametro Percentuale.

  1. Creare un file random_filter.go con il codice seguente:

    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
    }
    

    Hai aggiunto una struct RandomFilter che implementa l'interfaccia FeatureFilter della libreria featuremanagement. L'interfaccia FeatureFilter ha due metodi:

    • Name() restituisce il nome del filtro Random, che corrisponde al nome del filtro impostato nel flag di funzionalità Beta in Configurazione app di Azure.
    • Evaluate() viene chiamato ogni volta che viene valutato un flag di funzionalità. Un filtro di funzionalità abilita un flag di funzionalità restituendo true.
  2. Aggiornare il file main.go per registrare il RandomFilter durante la creazione del gestore delle funzionalità:

    // ...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 funzionalità in azione

Riavviare l'applicazione e aggiornare il browser per alcune volte. Il menu Beta viene visualizzato casualmente in base alla percentuale impostata senza che si intervenga sul flag di funzionalità.

Screenshot dell'app Web Gin con il menu Beta nascosto.

Screenshot dell'app Web Gin con il menu Beta.

Next steps

Per altre informazioni sui filtri di funzionalità predefiniti, continuare con i documenti seguenti.

Per il rundown completo delle funzionalità della libreria di gestione delle funzionalità Go, continuare con il documento seguente.