Dela via


Aktivera villkorsstyrda funktioner med ett anpassat filter i ett Go Gin-webbprogram

Funktionsflaggor kan använda funktionsfilter för att aktivera funktioner villkorligt. Mer information om funktionsfilter finns i Aktivera villkorsstyrda funktioner med funktionsfilter.

Exemplet som används i den här guiden baseras på Go Gin-webbappen som introducerades i snabbstarten för funktionshantering. Innan du fortsätter kan du slutföra snabbstarten för att skapa ett Go Gin-webbprogram med en betafunktionsflagga . När du är klar måste du lägga till ett anpassat funktionsfilter i betafunktionsflaggan i appkonfigurationsarkivet.

I den här guiden får du lära dig hur du implementerar ett anpassat funktionsfilter och använder funktionsfiltret för att aktivera funktioner villkorligt.

Prerequisites

Implementera ett anpassat funktionsfilter

Du har lagt till ett anpassat funktionsfilter med namnet Random med en procentparameter för din Beta-funktionsflagga i förutsättningarna. Därefter implementerar du funktionsfiltret för att aktivera betafunktionsflaggan baserat på den chans som definieras av parametern Procent .

  1. Skapa en random_filter.go fil med följande kod:

    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
    }
    

    Du har lagt till en RandomFilter struct som implementerar FeatureFilter gränssnittet från featuremanagement biblioteket. Gränssnittet FeatureFilter har två metoder:

    • Name() returnerar filternamnet Slumpmässigt, vilket matchar filternamnet som du angav i betafunktionsflaggan i Azure App Configuration.
    • Evaluate() anropas när en funktionsflagga utvärderas. Ett funktionsfilter aktiverar en funktionsflagga genom att truereturnera .
  2. Uppdatera din main.go-fil för att registrera RandomFilter när du skapar funktionhanterare:

    // ...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...
    }
    

Funktionsfilter i praktiken

Starta om programmet och uppdatera webbläsaren några gånger. Utan att manuellt växla funktionsflaggan visas Beta-menyn slumpmässigt baserat på den procentandel som du har angett.

Skärmbild av Gin-webbappen med betamenyn dold.

Skärmbild av Gin-webbappen med Beta-menyn.

Next steps

Om du vill veta mer om de inbyggda funktionsfiltren fortsätter du till följande dokument.

För en fullständig funktionsöversikt av Go-biblioteket för funktionshantering, fortsätt till följande dokument.