次の方法で共有


Go Gin Web アプリケーションでカスタム フィルターを使用して条件付き機能を有効にする

機能フラグでは、機能フィルターを使用して、機能を条件に応じて有効にすることができます。 機能フィルターの詳細については、「機能フィルターを使用して条件付き機能を有効にする」を参照してください。

このガイドで使用する例は、機能管理 クイック スタートで紹介した Go Gin Web アプリケーションに基づいています。 先に進む前に、クイック スタートを完了して、 ベータ 機能フラグを持つ Go Gin Web アプリケーションを作成します。 完了したら、App Configuration ストア内の Beta 機能フラグにカスタム機能フィルターを追加する必要があります。

このガイドでは、カスタム機能フィルターを実装し、機能フィルターを使用して条件付きで機能を有効にする方法について説明します。

Prerequisites

カスタム機能フィルターを実装する

前提条件にベータ機能フラグの Percentage パラメーターを使用して 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 ライブラリからFeatureFilter インターフェイスを実装するfeaturemanagement構造体を追加しました。 FeatureFilter インターフェイスには、次の 2 つの方法があります。

    • Name() は、フィルター名 Random を返します。これは、Azure App Configuration の ベータ 機能フラグで設定したフィルター名と一致します。
    • 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...
    }
    

機能フィルターの動作

アプリケーションを再起動し、ブラウザーを数回更新します。 機能フラグを手動で切り替えないと、設定した割合に基づいて ベータ メニューがランダムに表示されます。

[ベータ] メニューが非表示になっている Gin Web アプリのスクリーンショット。

[Beta]\(ベータ\) メニューが表示された Gin Web アプリのスクリーンショット。

Next steps

組み込みの機能フィルターについてさらに学ぶには、次のドキュメントに進んでください。

Go 機能管理ライブラリの完全な機能ランダウンについては、次のドキュメントに進んでください。