Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Флаги компонентов могут использовать фильтры компонентов для условного включения функций. Дополнительные сведения о фильтрах функций см. в статье "Включение условных функций" с помощью фильтров компонентов.
Пример, используемый в этом руководстве, основан на веб-приложении Go Gin, представленном в кратком руководстве по управлению функциями. Прежде чем продолжить, выполните краткое руководство по созданию веб-приложения Go Gin с флагом бета-функции . После завершения необходимо добавить пользовательский фильтр компонентов в флаг бета-функции в хранилище конфигурации приложений.
В этом руководстве вы узнаете, как реализовать настраиваемый фильтр функций и использовать фильтр компонентов для условного включения функций.
Prerequisites
- Создайте веб-приложение Go Gin с флагом компонента.
- Добавление настраиваемого фильтра компонентов в флаг компонента
Реализация настраиваемого фильтра компонентов
Вы добавили пользовательский фильтр функций с именем Random с параметром Процент для флага функции Beta в предварительных требованиях. Затем вы реализуете фильтр функций, чтобы включить флаг бета-функции на основе вероятности, определенной параметром Percentage .
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.
-
Обновите файл
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 отображается случайным образом на основе заданного процента.
Next steps
Дополнительные сведения о встроенных фильтрах функций см. в следующих документах.
Для полного обзора возможностей библиотеки управления функциями Go см. следующий документ.