Udostępnij za pomocą


Włączanie funkcji warunkowych za pomocą filtru niestandardowego w aplikacji internetowej Go Gin

Flagi funkcji mogą używać filtrów funkcji w celu warunkowego włączania funkcji. Aby dowiedzieć się więcej na temat filtrów funkcji, zobacz Włączanie funkcji warunkowych z filtrami funkcji.

Przykład używany w tym przewodniku jest oparty na aplikacji internetowej Go Gin wprowadzonej w przewodniku Szybki start dotyczącym zarządzania funkcjami. Przed kontynuowaniem ukończ szybki start, aby utworzyć aplikację internetową Go Gin z flagą funkcjonalności Beta. Po zakończeniu należy dodać niestandardowy filtr funkcji do flagi funkcji Beta w usłudze App Configuration.

W tym przewodniku dowiesz się, jak zaimplementować niestandardowy filtr funkcji i użyć filtru funkcji w celu warunkowego włączenia funkcji.

Prerequisites

Implementowanie niestandardowego filtru funkcji

Dodałeś niestandardowy filtr funkcji o nazwie Random z parametrem Procent dla flagi funkcji Beta w wymaganiach wstępnych. Następnie zaimplementujesz filtr funkcji, aby włączyć flagę funkcji beta na podstawie prawdopodobieństwa zdefiniowanego przez parametr Percentage .

  1. random_filter.go Utwórz plik z następującym kodem:

    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
    }
    

    Dodano strukturę RandomFilter , która implementuje FeatureFilter interfejs z featuremanagement biblioteki. Interfejs FeatureFilter ma dwie metody:

    • Name() Zwraca nazwę filtru Random, która jest zgodna z nazwą filtru ustawioną w flagi funkcji beta w usłudze Azure App Configuration.
    • Evaluate() jest wywoływane za każdym razem, gdy flaga funkcji jest oceniana. Filtr funkcji umożliwia flagę funkcji, zwracając wartość true.
  2. Zaktualizuj main.go plik, aby zarejestrować RandomFilter podczas tworzenia menedżera funkcji.

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

Filtr funkcji w akcji

Uruchom ponownie aplikację i odśwież przeglądarkę kilka razy. Bez ręcznego przełączania flagi funkcji menu Beta jest wyświetlane losowo na podstawie ustawionej wartości procentowej.

Zrzut ekranu przedstawiający aplikację internetową Gin z ukrytym menu beta.

Zrzut ekranu przedstawiający aplikację internetową Gin z menu Beta.

Next steps

Aby dowiedzieć się więcej na temat wbudowanych filtrów funkcji, przejdź do następujących dokumentów.

Aby zapoznać się z pełnym zestawieniem funkcji biblioteki do zarządzania funkcjami w Go, przejdź do poniższego dokumentu.