在本快速入門中,您將在 Azure 應用程式設定中建立功能旗標,並使用它來動態控制 Go 主控台應用程式中功能的可用性。
功能管理支援會擴充應用程式設定中的動態設定功能。 此範例示範如何將功能旗標整合到具有即時監控功能的 Go 控制台應用程式中。
先決條件
- 具有有效訂閱的 Azure 帳戶。 免費建立一個。
- 應用程式組態存放區。 建立存放區。
- 轉到 1.21 或更高版本。 如需安裝 Go 的相關資訊,請參閱 Go 下載頁面。
- Azure App Configuration Go 提供者 v1.1.0 或更新版本。
建立功能旗標
將名為 Beta 的功能旗標新增至應用程式組態存放區,並將 標籤 和 描述 保留預設值。 如需如何使用 Azure 入口網站或 CLI 將功能旗標新增至存放區的詳細資訊,請移至 建立功能旗標。
使用功能旗標
為您的 Go 專案建立一個新目錄並導航到其中:
mkdir go-feature-flag-quickstart cd go-feature-flag-quickstart初始化一個新的Go模組:
go mod init go-feature-flag-quickstart安裝 Azure 應用程式設定和功能管理所需的 Go 套件:
go get github.com/microsoft/Featuremanagement-Go/featuremanagement go get github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig建立具有下列內容的檔案
appconfig.go。 您可以使用 Microsoft Entra ID (建議) 或連接字串連線到應用程式組態存放區。package main import ( "context" "log" "os" "github.com/Azure/AppConfiguration-GoProvider/azureappconfiguration" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" ) func loadAzureAppConfiguration(ctx context.Context) (*azureappconfiguration.AzureAppConfiguration, error) { // Get the endpoint from environment variable endpoint := os.Getenv("AZURE_APPCONFIG_ENDPOINT") if endpoint == "" { log.Fatal("AZURE_APPCONFIG_ENDPOINT environment variable is not set") } // Create a credential using DefaultAzureCredential credential, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("Failed to create credential: %v", err) } // Set up authentication options with endpoint and credential authOptions := azureappconfiguration.AuthenticationOptions{ Endpoint: endpoint, Credential: credential, } // Configure feature flag options options := &azureappconfiguration.Options{ FeatureFlagOptions: azureappconfiguration.FeatureFlagOptions{ Enabled: true, RefreshOptions: azureappconfiguration.RefreshOptions{ Enabled: true, }, }, } // Load configuration from Azure App Configuration appConfig, err := azureappconfiguration.Load(ctx, authOptions, options) if err != nil { log.Fatalf("Failed to load configuration: %v", err) } return appConfig, nil }小提示
在
FeatureFlagOptions中未指定選取器時,其會載入應用程式組態存放區中沒有標籤的所有功能旗標。 功能旗標的預設重新整理的間隔是 30 秒。 您可以透過RefreshOptions參數自訂此行為。 例如,下列程式碼片段只會載入「機碼名稱」中以 TestApp: 開頭,且標籤為 dev 的功能旗標。 程式碼也會將重新整理的間隔時間變更為 5 分鐘。 請注意,此重新整理的間隔時間與一般的索引鍵值不同。azureappconfiguration.FeatureFlagOptions{ Enabled: true, Selectors: []azureappconfiguration.Selector{ { KeyFilter: "TestApp:*", LabelFilter: "dev", }, }, RefreshOptions: azureappconfiguration.RefreshOptions{ Enabled: true, Interval: 5 * time.Minute, }, }建立主應用程式檔案
main.go:package main import ( "context" "fmt" "log" "os" "time" "github.com/microsoft/Featuremanagement-Go/featuremanagement" "github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig" ) 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) } // Create feature manager featureManager, err := featuremanagement.NewFeatureManager(featureFlagProvider, nil) if err != nil { log.Fatalf("Error creating feature manager: %v", err) } // Monitor the Beta feature flag fmt.Println("Monitoring 'Beta' feature flag (press Ctrl+C to exit):") fmt.Println("Toggle the Beta feature flag in Azure portal to see real-time updates...") fmt.Println() ticker := time.NewTicker(5 * time.Second) defer ticker.Stop() for { select { case <-ticker.C: // Refresh configuration to get latest feature flag settings if err := appConfig.Refresh(ctx); err != nil { log.Printf("Error refreshing configuration: %v", err) continue } // Evaluate the Beta feature flag isEnabled, err := featureManager.IsEnabled("Beta") if err != nil { log.Printf("Error checking if Beta feature is enabled: %v", err) continue } // Print timestamp and feature status timestamp := time.Now().Format("15:04:05") fmt.Printf("[%s] Beta is enabled: %t\n", timestamp, isEnabled) case <-ctx.Done(): fmt.Println("\nShutting down...") return } } }
執行應用程式
執行應用程式:
go mod tidy go run .
應用程式開始監控 Beta 功能標誌,並每 5 秒顯示一次其目前狀態:
Monitoring 'Beta' feature flag (press Ctrl+C to exit): Toggle the Beta feature flag in Azure portal to see real-time updates... [14:30:15] Beta is enabled: false [14:30:20] Beta is enabled: false [14:30:25] Beta is enabled: false登入 Azure 入口網站。 選取 [所有資源],然後選取您之前建立的應用程式設定存放區。
選取 [功能管理員 ],然後找出 Beta 功能旗標。 選取 [啟用] 下的核取方塊,以啟用旗標。
返回您的主控台應用程式。 幾秒鐘後,您應該會看到功能旗標狀態變更:
[14:30:30] Beta is enabled: false [14:30:35] Beta is enabled: true [14:30:40] Beta is enabled: true您可以在 Azure 入口網站 中開啟和關閉功能旗標,以查看主控台應用程式中的即時更新,而不需要重新啟動。
按 Ctrl+C 停止應用程式。
清理資源
如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。
這很重要
刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含其他您想保留資源的資源群組中建立本文的資源,則應該從各自的面板中逐一刪除每個資源,而不用刪除整個資源群組。
- 登入 Azure 入口網站,然後選取 [資源群組]。
- 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
- 在結果清單中,選取資源群組名稱以查看概觀。
- 選擇 ,刪除資源群組。
- 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]。
不久後,系統便會刪除該資源群組及其所有的資源。
後續步驟
在本快速入門中,您在 Azure 應用程式設定中建立功能旗標,並在 Go 主控台應用程式中使用它。 功能管理 Go 程式庫提供豐富的功能旗標功能,可與 Azure 應用程式設定順暢整合。 如需更多功能,請繼續閱讀下列文件。
雖然功能旗標可讓您啟用或停用應用程式中的功能,但您可能想要根據應用程式的邏輯自訂功能旗標。 功能篩選可讓您按條件啟用功能旗標。 如需詳細資訊,請繼續下列教學課程。
Azure 應用程式設定提供內建功能篩選器,讓您只能在特定期間或對應用程式的特定目標對象啟用功能旗標。 如需詳細資訊,請繼續下列教學課程。