Delen via


Voorwaardelijke functies inschakelen met een aangepast filter in een Go Gin-webtoepassing

Functievlagmen kunnen functiefilters gebruiken om functies voorwaardelijk in te schakelen. Zie Voorwaardelijke functies inschakelen met functiefilters voor meer informatie over functiefilters.

Het voorbeeld dat in deze handleiding wordt gebruikt, is gebaseerd op de Go Gin-webtoepassing die is geïntroduceerd in de quickstart voor functiebeheer. Voordat u verdergaat, voltooit u de quickstart om een Go Gin-webtoepassing te maken met een bètafunctievlag . Zodra dit is voltooid, moet u een aangepast functiefilter toevoegen aan de Bèta-functievlag in uw App Configuration-opslag.

In deze handleiding leert u hoe u een aangepast functiefilter implementeert en het functiefilter gebruikt om functies voorwaardelijk in te schakelen.

Prerequisites

Een aangepast functiefilter implementeren

U hebt een aangepast functiefilter met de naam Random toegevoegd aan de vereisten, met een parameter Percentage voor uw bèta-functievlag. Vervolgens implementeert u het functiefilter om de vlag Bèta-functie in te schakelen op basis van de kans die is gedefinieerd door de parameter Percentage .

  1. Maak een random_filter.go bestand met de volgende code:

    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
    }
    

    U hebt een RandomFilter struct toegevoegd waarmee de FeatureFilter interface uit de featuremanagement bibliotheek wordt geïmplementeerd. De FeatureFilter interface heeft twee methoden:

    • Name() retourneert de filternaam Random, die overeenkomt met de filternaam die u hebt ingesteld in de bètafunctievlag in Azure App Configuration.
    • Evaluate() wordt aangeroepen wanneer een functievlag wordt geëvalueerd. Met een functiefilter kan een functievlag worden ingeschakeld door true te retourneren.
  2. Werk uw main.go bestand bij om het RandomFilter te registreren bij het maken van de featuremanager.

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

Functiefilter in actie

Start de toepassing opnieuw en vernieuw de browser een paar keer. Zonder de functievlag handmatig in te schakelen, wordt het bètamenu willekeurig weergegeven op basis van het percentage dat u hebt ingesteld.

Schermopname van Gin-web-app met bètamenu verborgen.

Schermopname van Gin-web-app met bètamenu.

Next steps

Ga verder met de volgende documenten voor meer informatie over de ingebouwde functiefilters.

Ga naar het volgende document voor het volledige overzicht van de functies van de bibliotheek voor functiebeheer in Go.