在本快速入門中,您將在 Azure 應用程式設定中建立功能旗標,並使用它來動態控制 Go Gin Web 應用程式中新網頁的可用性,而不需要重新啟動或重新部署它。
功能管理支援會擴充應用程式設定中的動態設定功能。 此範例示範如何透過即時更新和條件式頁面轉譯將功能旗標整合到 Go Gin Web 應用程式中。
先決條件
- 具有有效訂閱的 Azure 帳戶。 免費建立一個。
- 應用程式組態存放區。 建立存放區。
- 轉到 1.21 或更高版本。 如需安裝 Go 的相關資訊,請參閱 Go 下載頁面。
- Azure App Configuration Go 提供者 v1.1.0 或更新版本。
建立功能旗標
將名為 Beta 的功能旗標新增至應用程式組態存放區,並將 標籤 和 描述 保留預設值。 如需如何使用 Azure 入口網站或 CLI 將功能旗標新增至存放區的詳細資訊,請移至 建立功能旗標。
建立 Go Web 應用程式
為您的 Go 專案建立一個新目錄並導航到其中:
mkdir gin-feature-flag-quickstart cd gin-feature-flag-quickstart初始化一個新的Go模組:
go mod init gin-feature-flag-quickstart安裝 Azure 應用程式設定、Gin Web 架構和功能管理所需的 Go 套件:
go get github.com/gin-gonic/gin go get github.com/microsoft/Featuremanagement-Go/featuremanagement go get github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig為您的HTML範本建立範本目錄,並新增所需的HTML檔案:
mkdir templates從 GitHub 存放庫 新增下列 HTML 範本檔案,並將其放在目錄中
templates:-
index.html- 首頁範本 -
beta.html- 測試版頁面範本
-
使用功能旗標
建立具有下列內容的檔案
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" "net/http" "os" "github.com/Azure/AppConfiguration-GoProvider/azureappconfiguration" "github.com/gin-gonic/gin" "github.com/microsoft/Featuremanagement-Go/featuremanagement" "github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig" ) type WebApp struct { featureManager *featuremanagement.FeatureManager appConfig *azureappconfiguration.AzureAppConfiguration } func (app *WebApp) refreshMiddleware() gin.HandlerFunc { return func(c *gin.Context) { go func() { ctx := context.Background() if err := app.appConfig.Refresh(ctx); err != nil { log.Printf("Error refreshing configuration: %v", err) } }() c.Next() } } func (app *WebApp) featureMiddleware() gin.HandlerFunc { return func(c *gin.Context) { // Check if Beta feature is enabled betaEnabled, err := app.featureManager.IsEnabled("Beta") if err != nil { log.Printf("Error checking Beta feature: %v", err) betaEnabled = false } // Store feature flag status for use in templates c.Set("betaEnabled", betaEnabled) c.Next() } } func (app *WebApp) setupRoutes(r *gin.Engine) { r.Use(app.refreshMiddleware()) r.Use(app.featureMiddleware()) // Load HTML templates r.LoadHTMLGlob("templates/*.html") // Routes r.GET("/", app.homeHandler) r.GET("/beta", app.betaHandler) } // Home page handler func (app *WebApp) homeHandler(c *gin.Context) { betaEnabled := c.GetBool("betaEnabled") c.HTML(http.StatusOK, "index.html", gin.H{ "title": "Feature Management Example App", "betaEnabled": betaEnabled, }) } // Beta page handler func (app *WebApp) betaHandler(c *gin.Context) { betaEnabled := c.GetBool("betaEnabled") if !betaEnabled { return } c.HTML(http.StatusOK, "beta.html", gin.H{ "title": "Beta Page", }) } 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) } // Create web app app := &WebApp{ featureManager: featureManager, appConfig: appConfig, } // Set up Gin with default middleware (Logger and Recovery) r := gin.Default() // Set up routes app.setupRoutes(r) // Start server fmt.Println("Starting server on http://localhost:8080") fmt.Println("Open http://localhost:8080 in your browser") fmt.Println("Toggle the 'Beta' feature flag in Azure portal to see changes") fmt.Println() if err := r.Run(":8080"); err != nil { log.Fatalf("Failed to start server: %v", err) } }
執行 Web 應用程式
設定驗證的環境變數 並執行應用程式。
go mod tidy go run .開啟瀏覽器視窗,然後移至
http://localhost:8080。 您的瀏覽器應該會顯示如下圖所示的頁面。
登入 Azure 入口網站。 選取 [所有資源],然後選取您之前建立的應用程式設定存放區。
選取 [功能管理員 ],然後找出 Beta 功能旗標。 選取 [啟用] 下的核取方塊,以啟用旗標。
重新整理瀏覽器數次。 當重新整理間隔時間範圍過去時,頁面會顯示更新的內容:
請注意,Beta 選單項目現在出現在導覽列中。 單擊它即可訪問測試版頁面:
清理資源
如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。
這很重要
刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含其他您想保留資源的資源群組中建立本文的資源,則應該從各自的面板中逐一刪除每個資源,而不用刪除整個資源群組。
- 登入 Azure 入口網站,然後選取 [資源群組]。
- 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
- 在結果清單中,選取資源群組名稱以查看概觀。
- 選擇 ,刪除資源群組。
- 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]。
不久後,系統便會刪除該資源群組及其所有的資源。
後續步驟
在本快速入門中,您在 Azure 應用程式設定中建立功能旗標,並在 Go Gin Web 應用程式中使用它。 功能管理 Go 程式庫提供與 Azure 應用程式設定無縫整合的功能旗標功能。如需更多功能,請繼續閱讀下列檔。
雖然功能旗標可讓您啟用或停用應用程式中的功能,但您可能想要根據應用程式的邏輯自訂功能旗標。 功能篩選可讓您按條件啟用功能旗標。 如需詳細資訊,請繼續下列教學課程。
Azure 應用程式設定提供內建功能篩選器,讓您只能在特定期間或對應用程式的特定目標對象啟用功能旗標。 如需詳細資訊,請繼續下列教學課程。