Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Флаги компонентов могут использовать фильтры компонентов для условного включения функций. Дополнительные сведения о фильтрах функций см. в статье "Включение условных функций" с помощью фильтров компонентов.
Пример, используемый в этом руководстве, основан на веб-приложении 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 см. следующий документ.