Delen via


Quickstart: Functievlagmen toevoegen aan een Go-console-app

In deze quickstart maakt u een functievlag in Azure App Configuration en gebruikt u deze om de beschikbaarheid van functies in een Go-console-app dynamisch te beheren.

De ondersteuning voor functiebeheer breidt de dynamische configuratiefunctie in App Configuration uit. In dit voorbeeld ziet u hoe u functievlagmen integreert in een Go-consoletoepassing met realtime bewakingsmogelijkheden.

Vereiste voorwaarden

Een functievlag maken

Voeg een functievlag met de naam Beta toe aan het App Configuration-archief en laat label en beschrijving ongewijzigd met de standaardwaarden. Ga naar Een functievlag maken voor meer informatie over het toevoegen van functievlagmen aan een winkel met behulp van Azure Portal of de CLI.

Schermopname van het maken van een functievlag.

Een functievlag gebruiken

  1. Maak een nieuwe map voor uw Go-project en navigeer ernaartoe:

    mkdir go-feature-flag-quickstart
    cd go-feature-flag-quickstart
    
  2. Initialiseer een nieuwe Go-module:

    go mod init go-feature-flag-quickstart
    
  3. Installeer de vereiste Go-pakketten voor Azure App Configuration en functiebeheer:

    go get github.com/microsoft/Featuremanagement-Go/featuremanagement
    go get github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig
    
  4. Maak een bestand met de naam appconfig.go met de volgende inhoud. U kunt verbinding maken met uw App Configuration-winkel met behulp van Microsoft Entra ID (aanbevolen) of een verbindingstekenreeks.

    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
    }
    

    Aanbeveling

    Wanneer er geen selector is opgegeven FeatureFlagOptions, worden alle functievlaggen zonder label geladen in uw App Configuration-opslag. Het standaardvernieuwingsinterval van functievlagmen is 30 seconden. U kunt dit gedrag aanpassen via de RefreshOptions parameter. Met het volgende codefragment worden bijvoorbeeld alleen functievlagmen geladen die beginnen met TestApp: in hun sleutelnaam en de labeldev. De code wijzigt ook de vernieuwingsintervaltijd in 5 minuten. Houd er rekening mee dat deze vernieuwingsintervaltijd gescheiden is van die voor normale sleutelwaarden.

    azureappconfiguration.FeatureFlagOptions{
        Enabled: true,
        Selectors: []azureappconfiguration.Selector{
            {
                KeyFilter:   "TestApp:*",
                LabelFilter: "dev",
            },
        },
        RefreshOptions: azureappconfiguration.RefreshOptions{
            Enabled: true,
            Interval: 5 * time.Minute,
        },
    }
    
  5. Maak het hoofdtoepassingsbestand 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
            }
        }
    }
    

De toepassing uitvoeren

  1. Voer de toepassing uit:

    go mod tidy
    go run .
    

  2. De toepassing begint met het bewaken van de bètafunctievlag en geeft elke 5 seconden de huidige status weer:

    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
    
  3. Meld u aan bij het Azure-portaal. Selecteer Alle resources en selecteer het App Configuration-archief dat u eerder hebt gemaakt.

  4. Selecteer Functiebeheer en zoek de bètafunctievlag. Schakel de vlag in door het selectievakje onder Ingeschakeld in te schakelen.

  5. Ga terug naar uw consoletoepassing. Na een paar seconden ziet u dat de status van de functievlag wordt gewijzigd:

    [14:30:30] Beta is enabled: false
    [14:30:35] Beta is enabled: true
    [14:30:40] Beta is enabled: true
    
  6. U kunt de functievlag in- en uitschakelen in Azure Portal om realtime updates in uw consoletoepassing weer te geven zonder deze opnieuw op te starten.

  7. Druk op Ctrl+C om de toepassing te stoppen.

De hulpbronnen opschonen

Als u de resources die in dit artikel zijn gemaakt niet wilt blijven gebruiken, verwijdert u de resourcegroep die u hier hebt gemaakt om kosten te voorkomen.

Belangrijk

Het verwijderen van een resourcegroep kan niet ongedaan worden gemaakt. De resourcegroep en alle resources daarin worden permanent verwijderd. Zorg ervoor dat u niet per ongeluk de verkeerde groep of bronnen verwijdert. Als u de resources voor dit artikel in een resourcegroep hebt gemaakt die andere resources bevat die u wilt behouden, moet u elke resource afzonderlijk verwijderen uit het deelvenster in plaats van dat u de resourcegroep verwijdert.

  1. Meld u aan bij de Azure-portal en selecteer Resourcegroepen.
  2. Voer in het vak Filteren op naam de naam van uw resourcegroep in.
  3. Selecteer in de resultatenlijst de resourcegroepnaam om een overzicht te bekijken.
  4. Selecteer Resourcegroep verwijderen.
  5. U wordt gevraagd om het verwijderen van de resourcegroep te bevestigen. Voer de naam van de resourcegroep in die u wilt bevestigen en selecteer Verwijderen.

Na enkele ogenblikken worden de resourcegroep en alle bijbehorende resources verwijderd.

Volgende stappen

In deze quickstart hebt u een functievlag gemaakt in Azure App Configuration en deze gebruikt in een Go-consoletoepassing. De Go-bibliotheek voor functiebeheer biedt uitgebreide mogelijkheden voor functievlagken die naadloos kunnen worden geïntegreerd met Azure App Configuration. Ga naar het volgende document voor meer functies.

Hoewel u met een functievlag functionaliteit in uw app kunt activeren of deactiveren, kunt u een functievlag aanpassen op basis van de logica van uw app. Met functiefilters kunt u een functievlag voorwaardelijk inschakelen. Ga verder met de volgende zelfstudie voor meer informatie.

Azure-app Configuratie biedt ingebouwde functiefilters waarmee u een functievlag alleen kunt activeren tijdens een bepaalde periode of voor een bepaalde doelgroep van uw app. Ga verder met de volgende zelfstudie voor meer informatie.