Поделиться через


Включение условных функций с помощью пользовательского фильтра в веб-приложении Go Gin

Флаги компонентов могут использовать фильтры компонентов для условного включения функций. Дополнительные сведения о фильтрах функций см. в статье "Включение условных функций" с помощью фильтров компонентов.

Пример, используемый в этом руководстве, основан на веб-приложении Go Gin, представленном в кратком руководстве по управлению функциями. Прежде чем продолжить, выполните краткое руководство по созданию веб-приложения Go Gin с флагом бета-функции . После завершения необходимо добавить пользовательский фильтр компонентов в флаг бета-функции в хранилище конфигурации приложений.

В этом руководстве вы узнаете, как реализовать настраиваемый фильтр функций и использовать фильтр компонентов для условного включения функций.

Prerequisites

Реализация настраиваемого фильтра компонентов

Вы добавили пользовательский фильтр функций с именем Random с параметром Процент для флага функции Beta в предварительных требованиях. Затем вы реализуете фильтр функций, чтобы включить флаг бета-функции на основе вероятности, определенной параметром Percentage .

  1. random_filter.go Создайте файл со следующим кодом:

    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
    }
    

    Вы добавили структуру RandomFilter , реализующую FeatureFilter интерфейс из библиотеки featuremanagement . Интерфейс FeatureFilter имеет два метода:

    • Name() возвращает имя фильтра Random, которое соответствует имени фильтра, заданному в флаге бета-функции в конфигурации приложений Azure.
    • Evaluate() вызывается всякий раз, когда вычисляется флаг компонента. Фильтр функций включает флаг функции, возвращая его true.
  2. Обновите файл main.go, чтобы зарегистрировать RandomFilter при создании менеджера функций:

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

Фильтр компонентов в действии

Повторно запустите приложение и обновите браузер несколько раз. Без ручного переключения флага функции меню Beta отображается случайным образом на основе заданного процента.

Снимок экрана: веб-приложение Gin с скрытым меню бета-версии.

Снимок экрана: веб-приложение Gin с меню бета-версии.

Next steps

Дополнительные сведения о встроенных фильтрах функций см. в следующих документах.

Для полного обзора возможностей библиотеки управления функциями Go см. следующий документ.