你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Go Gin Web 应用程序中使用自定义筛选器启用条件功能

功能标志可以使用功能筛选器有条件地启用功能。 若要了解有关功能筛选器的详细信息,请参阅通过功能筛选器启用条件功能

本指南中使用的示例基于功能管理 快速入门中引入的 Go Gin Web 应用程序。 在进行下一步之前,请先完成快速入门教程,创建一个具有 Beta 功能标志的 Go Gin 网络应用程序。 完成后,必须将自定义功能筛选器添加到你的应用程序配置存储中的 Beta 功能标志。

本指南介绍如何实现自定义功能筛选器,并使用功能筛选器有条件地启用功能。

Prerequisites

实现自定义功能筛选器

在先决条件中,您为 Beta 功能标志添加了名为 Random 的自定义功能筛选器,其中包含 百分比 参数。 接下来,你将实现功能筛选器,根据 Percentage 参数定义的几率启用 Beta 功能标志。

  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结构体,实现了featuremanagement库中的FeatureFilter接口。 该 FeatureFilter 接口有两种方法:

    • Name() 返回筛选器名称 Random,它与在 Azure 应用配置中的 Beta 功能标志中设置的筛选器名称匹配。
    • 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 Web 应用的屏幕截图,Beta 菜单已隐藏。

包含 Beta 菜单的 Gin Web 应用的屏幕截图。

Next steps

若要详细了解内置功能筛选器,请继续学习以下文档。

要了解 Go 功能管理库的完整功能概览,请继续阅读以下文档。