
Si vous utilisez le drapeau de fonction GO, veuillez considérer pour vous ajouter dans la liste des adoptants.
Cet acte simple stimule considérablement la visibilité et la crédibilité du projet, apportant une contribution substantielle à son avancement.Si vous souhaitez me soutenir et aller drapeau de fonction, vous pouvez également devenir un sponsor.
GO ENGAGE FALLE est une solution légère et open source qui fournit une implémentation de drapeau de fonction simple et complète.
La solution a été construite pour faciliter l'utilisation des indicateurs de fonctionnalité dans votre code avec la configuration la plus simple possible.
À l'origine, le drapeau de fonction GO a été conçu comme une solution exclusivement pour la langue GO . Avec la nouvelle normalisation des indicateurs de fonctionnalité par le projet OpenFeature, la solution est désormais disponible pour plusieurs langues (liste des langages pris en charge) via un serveur API simple appelé proxy de relais, qui peut être hébergé.
Conseil
Si vous n'êtes pas familier avec les drapeaux de fonctionnalité, j'ai écrit un article qui explique pourquoi les drapeaux de fonctionnalité peuvent fixer votre cycle d'itération.
HTTP , S3 , Kubernetes , voir la liste complète ).JSON , TOML et YAML ).S3 , Google cloud storage , file , voir la liste complète ) .webhook et slack ) . Le code de cette démo est disponible dans examples/demo .
Important
Avant de commencer à utiliser l'indicateur de fonction GO, vous devez décider si vous souhaitez utiliser les SDK des fonctionnalités ouvertes ou si vous souhaitez utiliser l'indicateur de fonction GO comme module Go.
Nous vous recommandons d'utiliser le relais-Proxy pour une solution centrale de gestion des drapeaux et d'évaluation, il permet la prise en charge des multi-langues, et il intègre de manière transparente avec les SDK de fonction ouverte.
C'est la meilleure façon d'obtenir le plein potentiel du drapeau de fonction GO.
Si votre projet est exclusivement en Go, le module GO est une option. Il effectuera l'évaluation de l'indicateur directement dans votre code de rendez-vous.
Créez un nouveau fichier YAML contenant votre première configuration d'indicateur.
# 20% of the users will use the variation "my-new-feature"
test-flag :
variations :
my-new-feature : true
my-old-feature : false
defaultRule :
percentage :
my-new-feature : 20
my-old-feature : 80 Ce drapeau a divisé l'utilisation de ce drapeau, 20% utilisera la variation my-new-feature et 80% la variation my-old-feature .
Créez un nouveau fichier YAML contenant la configuration de votre proxy de relais.
listen : 1031
pollingInterval : 1000
startWithRetrieverError : false
retriever :
kind : file
path : /goff/flag-config.yaml
exporter :
kind : log Et nous exécuterons le proxy de relais localement pour rendre l'API disponible.
Le port par défaut sera 1031 .
# Launch the container
docker run
-p 1031:1031
-v $( pwd ) /flag-config.yaml:/goff/flag-config.yaml
-v $( pwd ) /goff-proxy.yaml:/goff/goff-proxy.yaml
gofeatureflag/go-feature-flag:latest
Si vous ne souhaitez pas utiliser Docker pour installer le proxy de relais, vous pouvez suivre d'autres façons pour l'installer dans la documentation.
Dans cet exemple, nous utilisons le SDK NodeJS , mais vous pouvez vérifier d'autres langues ici.
npm i @openfeature/server-sdk @openfeature/go-feature-flag-providerDans l'initialisation de votre application, vous devez créer un client à l'aide du SDK de la fonctionnalité ouverte et l'initialiser.
const { OpenFeature } = require ( "@openfeature/server-sdk" ) ;
const { GoFeatureFlagProvider } = require ( "@openfeature/go-feature-flag-provider" ) ;
// init Open Feature SDK with GO Feature Flag provider
const goFeatureFlagProvider = new GoFeatureFlagProvider ( {
endpoint : 'http://localhost:1031/' // DNS of your instance of relay proxy
} ) ;
OpenFeature . setProvider ( goFeatureFlagProvider ) ;
const featureFlagClient = OpenFeature . getClient ( 'my-app' ) Vous pouvez maintenant évaluer vos drapeaux n'importe où dans votre code en utilisant ce client.
// Context of your flag evaluation.
// With GO Feature Flag you MUST provide a targetingKey that is a unique identifier of the user.
const evaluationContext = {
targetingKey : '1d1b9238-2591-4a47-94cf-d2bc080892f1' , // user unique identifier (mandatory)
firstname : 'john' ,
lastname : 'doe' ,
email : '[email protected]' ,
admin : true , // this field is used in the targeting rule of the flag "flag-only-for-admin"
// ...
} ;
const adminFlag = await featureFlagClient . getBooleanValue ( 'flag-only-for-admin' , false , evaluationContext ) ;
if ( adminFlag ) {
// flag "flag-only-for-admin" is true for the user
console . log ( "new feature" ) ;
} else {
// flag "flag-only-for-admin" is false for the user
}go get github.com/thomaspoignant/go-feature-flag Créez un nouveau fichier YAML contenant votre première configuration d'indicateur.
# 20% of the users will use the variation "my-new-feature"
test-flag :
variations :
my-new-feature : true
my-old-feature : false
defaultRule :
percentage :
my-new-feature : 20
my-old-feature : 80 Ce drapeau a divisé l'utilisation de ce drapeau, 20% utilisera la variation my-new-feature et 80% la variation my-old-feature .
Tout d'abord, vous devez initialiser le ffclient avec l'emplacement de votre fichier backend.
err := ffclient . Init (ffclient. Config {
PollingInterval : 3 * time . Second ,
Retriever : & fileretriever. Retriever {
Path : "flag-config.goff.yaml" ,
},
})
defer ffclient . Close ()Cet exemple chargera un fichier à partir de votre ordinateur local et actualisera les drapeaux toutes les 3 secondes (si vous omettez le PollingInterval, la valeur par défaut est de 60 secondes).
ℹ Info
Il s'agit d'une configuration de base pour tester localement, en production, il est préférable d'utiliser un endroit distant pour stocker votre fichier de configuration de l'indicateur de fonction.
Regardez la liste des options disponibles dans la page du fichier de drapeau de votre magasin .
Vous pouvez maintenant évaluer vos drapeaux n'importe où dans votre code.
user := ffcontext . NewEvaluationContext ( "user-unique-key" )
hasFlag , _ := ffclient . BoolVariation ( "test-flag" , user , false )
if hasFlag {
// flag "test-flag" is true for the user
} else {
// flag "test-flag" is false for the user
} La documentation complète est disponible sur https://docs.gofeaturesflag.org
Vous pouvez trouver plus d'exemples dans les exemples / répertoires.
À l'origine, le drapeau de fonction a été construit pour être une bibliothèque de Golang uniquement, mais il limite trop l'écosystème.
Pour être compatible avec plus de langues, nous avons implémenté le proxy de relais de l'indicateur de fonction GO. Il s'agit d'un service que vous pouvez héberger qui fournit une API pour évaluer vos drapeaux, vous pouvez l'appeler à l'aide de HTTP pour obtenir votre variation.
Puisque nous croyons à la normalisation, nous mettons également en œuvre des fournisseurs OpenFeature pour interagir avec cette API dans la langue de votre choix.
(OpenFeature est encore à un stade précoce, donc toutes les langues ne sont pas prises en charge et attendent des changements à l'avenir)
Pour l'instant, nous avons des fournisseurs pour:
| Langue | Source de fournisseur | Version |
|---|---|---|
| Aller | Fournisseur de go | |
| Java / Kotlin (serveur) | Fournisseur Java | |
| Android / Kotlin (client) | Fournisseur de kotlin | |
| JavaScript / TypeScript (serveur) | Fournisseur de serveurs | |
| JavaScript / TypeScript (client) | Fournisseur de clients | |
| Python | Fournisseur de python | |
| .Filet | Fournisseur .NET | |
| Rubis | Fournisseur de rubis | |
| Rapide | Fournisseur rapide | |
| Php | Fournisseur PHP |
Le module prend en charge différentes façons de récupérer le fichier de drapeau.
Les retrievers disponibles sont:
Voir la liste complète et plus d'informations.
La fonctionnalité de l'indicateur de fonctionnalité GO consiste à centraliser tous vos indicateurs de fonctionnalité dans un seul fichier et à éviter d'héberger et de maintenir un serveur backend pour les gérer.
Votre fichier doit être un fichier YAML , JSON ou TOML avec une liste de drapeaux (exemples: YAML , JSON , TOML ) .
La façon la plus simple de créer votre fichier de configuration consiste à utiliser l'éditeur d'indicateur de fonction GO disponible sur https://editor.gofeaturesflag.org.
Si vous préférez le faire manuellement, suivez l'instruction ci-dessous.
Une configuration de drapeau ressemble à ceci:
# This is your configuration for your first flag
first-flag :
variations : # All possible return value for your feature flag
A : false
B : true
targeting : # If you want to target a subset of your users in particular
- query : key eq "random-key"
percentage :
A : 0
B : 100
defaultRule : # When no targeting match we use the defaultRule
variation : A
# A second example of a flag configuration
second-flag :
variations :
A : " valueA "
B : " valueB "
defaultValue : " a default value "
targeting :
- name : notkey_rule
query : key eq "not-a-key"
percentage :
A : 10
B : 90
defaultRule :
variation : defaultValue
version : " 12 "
experimentation :
start : 2021-03-20T00:00:00.1-05:00
end : 2021-03-21T00:00:00.1-05:00{
"first-flag" : {
"variations" : {
"A" : false ,
"B" : true
},
"targeting" : [
{
"query" : " key eq " random-key " " ,
"percentage" : {
"A" : 0 ,
"B" : 100
}
}
],
"defaultRule" : {
"variation" : " A "
}
},
"second-flag" : {
"variations" : {
"A" : " valueA " ,
"B" : " valueB " ,
"defaultValue" : " a default value "
},
"targeting" : [
{
"name" : " notkey_rule " ,
"query" : " key eq " not-a-key " " ,
"percentage" : {
"A" : 10 ,
"B" : 90
}
}
],
"defaultRule" : {
"variation" : " defaultValue "
},
"version" : " 12 " ,
"experimentation" : {
"start" : " 2021-03-20T05:00:00.100Z " ,
"end" : " 2021-03-21T05:00:00.100Z "
}
}
}[ first-flag . variations ]
A = false
B = true
[[ first-flag . targeting ]]
query = ' key eq "random-key" '
[ first-flag . targeting . percentage ]
A = 0
B = 100
[ first-flag . defaultRule ]
variation = " A "
[ second-flag ]
version = " 12 "
[ second-flag . variations ]
A = " valueA "
B = " valueB "
defaultValue = " a default value "
[[ second-flag . targeting ]]
name = " notkey_rule "
query = ' key eq "not-a-key" '
[ second-flag . targeting . percentage ]
A = 10
B = 90
[ second-flag . defaultRule ]
variation = " defaultValue "
[ second-flag . experimentation ]
start = 2021-03-20T05:00:00.100Z
end = 2021-03-21T05:00:00.100ZPour des informations détaillées sur les champs requis pour créer un drapeau, veuillez vous référer à la documentation.
Le format de requête est basé sur la bibliothèque nikunjy/rules .
Toutes les opérations peuvent être écrites en capitalisation ou en minuscules (Ex: eq ou EQ peut être utilisé).
Les opérations logiques prises en charge sont AND OR .
Comparez l'expression et leurs définitions ( a|b signifie que vous pouvez utiliser l'un des deux a ou b ):
eq|==: equals to
ne|!=: not equals to
lt|<: less than
gt|>: greater than
le|<=: less than equal to
ge|>=: greater than equal to
co: contains
sw: starts with
ew: ends with
in: in a list
pr: present
not: not of a logical expression
key eq "[email protected]"anonymous ne trueuserId eq "12345" Un contexte d'évaluation dans un système de signalisation de caractéristiques est crucial pour déterminer la sortie d'une évaluation de l'indicateur de fonctionnalité. Il s'agit d'une collection de données pertinentes sur les conditions dans lesquelles l'évaluation est effectuée. Ces données peuvent être fournies via un mélange d'informations statiques (nom du serveur, IP, etc ...) et des entrées dynamiques (informations sur l'utilisateur effectuant l'action, etc ...), ainsi que des informations d'état qui sont implicitement effectuées par l'exécution du programme.
Lorsque vous utilisez un indicateur de fonction GO, il est souvent nécessaire de personnaliser l'expérience pour différents utilisateurs. C'est là que le concept d'une clé de ciblage entre en jeu. Une clé de ciblage est un identifiant unique qui représente le contexte de l'évaluation (e-mail, ID de session, une empreinte digitale ou tout ce qui est cohérent) , garantissant qu'ils sont systématiquement exposés à la même variation d'une fonctionnalité, même sur plusieurs visites ou sessions.
Par exemple, le drapeau de fonction GO garantit que dans les cas où une fonctionnalité est déployée sur un pourcentage d'utilisateurs, en fonction de la clé de ciblage, ils verront la même variation chaque fois qu'ils rencontrent l'indicateur de fonctionnalité.
La clé de ciblage est une partie fondamentale du contexte d'évaluation car elle affecte directement la détermination de quelle variante de caractéristique est servie à un utilisateur particulier, et il maintient cette continuité au fil du temps. Pour ce faire, allez, Fonctionne le drapeau pour faire un hachage pour définir si l'indicateur peut s'appliquer ou non à ce contexte d'évaluation.
Nous vous recommandons d'utiliser un hachage si possible.
Le ciblage du drapeau de fonctionnalité et les déploiements sont tous déterminés par l'utilisateur que vous passez à vos appels d'évaluation.
Dans certains cas, vous devrez peut-être épouser les utilisateurs en fonction d'une clé différente, par exemple un teamId , afin que les utilisateurs de la même équipe soient exposés à la même variation de drapeau et obtiennent une expérience cohérente.
Ceci peut être réalisé en définissant le champ bucketingKey dans la configuration de l'indicateur. Lorsqu'elle est présente, la valeur correspondant au bucketingKey sera extraite des attributs, et cette valeur utilisée pour le hachage et la détermination du résultat à la place du targetingKey .
Les variations sont les différentes valeurs possibles pour un indicateur de fonctionnalité.
Le drapeau de fonction GO peut gérer plus que des valeurs boolean ; La valeur de votre drapeau peut être l'un des types suivants:
boolintfloatstringjson arrayjson object Boolean result = featureFlagClient . getBooleanValue ( "your.feature.key" , false , userContext );
// this example is using the java SDK
// result is now true or false depending on the setting of this boolean feature flagLes méthodes de variation prennent la clé de l'indicateur de fonctionnalité, un contexte d'évaluation et une valeur par défaut .
Pourquoi avons-nous besoin d'une valeur par défaut? Si nous avons une erreur lors de l'évaluation de l'indicateur, nous retournerons la valeur par défaut, vous obtiendrez toujours un retour de valeur de la fonction et nous ne lancerons jamais d'erreur.
Dans l'exemple, si le drapeau your.feature.key n'existe pas, le résultat sera false .
Notez que le résultat fournira toujours une valeur utilisable.
Une partie critique de chaque nouvelle version de fonctionnalités est d'orchestrer le calendrier de lancement réel entre les équipes de produit, d'ingénierie et de marketing.
La livraison de puissantes expériences utilisateur nécessite généralement des équipes logicielles pour gérer des versions complexes et effectuer des mises à jour manuelles à des moments gênants.
Mais il n'est pas nécessaire, avoir une stratégie de déploiement complexe vous permet d'avoir un cycle de vie pour vos drapeaux.
Si vous souhaitez être informé lorsqu'un drapeau a changé, vous pouvez configurer un notificateur .
Un notificateur enverra une notification au système ciblé pour les informer qu'une nouvelle configuration de drapeau a été chargée.
Le drapeau de fonction GO peut gérer plus d'un notificateur à la fois.
Les notificateurs disponibles sont:
Le drapeau de fonctionn GO vous permet d'exporter des données sur l'utilisation de vos drapeaux.
Il recueille tous les événements de variation et peut sauver ces événements à plusieurs endroits:
Actuellement, nous ne prenons que les événements de fonctionnalités uniquement.
Il représente des évaluations de drapeaux individuels et est considéré comme des événements de "pleine fidélité".
Un exemple d'événement de fonctionnalité ci-dessous:
{
"kind" : " feature " ,
"contextKind" : " anonymousUser " ,
"userKey" : " ABCD " ,
"creationDate" : 1618228297 ,
"key" : " test-flag " ,
"variation" : " Default " ,
"value" : false ,
"default" : false ,
"source" : " SERVER "
}Le format des données est décrit dans la documentation. Les événements sont collectés et envoyés en vrac pour éviter de spammer votre exportateur.
Un outil de ligne de commande est disponible pour vous aider à pelucher votre fichier de configuration: go-feture-flag-lint.
Ce projet accueille les contributions de la communauté. Si vous êtes intéressé à contribuer, consultez le guide des contributeurs pour quelques conseils utiles.
Étant donné que la voix de tout le monde est importante, nous voulons avoir des nouvelles de la communauté.
Pour cette raison, nous lançons une réunion communautaire toutes les 2 semaines et c'est l'endroit idéal pour discuter de l'avenir du drapeau de fonction GO et vous aider à l'utiliser à plein potentiel.
| Nom | Temps de rencontre | Notes de réunion | Discussions |
|---|---|---|---|
| GO Feature Flag Community Meeting | Tous les deux jeudis à 10h00 HE / 16h00 CET | Google Doc | Lien VC (Meet) |
Merci beaucoup à nos contributeurs.
Devenez un sponsor et montrez votre support pour aller du drapeau de fonctionnalité.
Ce sont nos sponsors vraiment cool!

Si vous utilisez go-feature-flag , nous vous encourageons à inclure le nom de votre entreprise dans cette liste. Cet acte simple stimule considérablement la visibilité et la crédibilité du projet, apportant une contribution substantielle à son avancement. Pour ce faire, veuillez vous ajouter aux adoptants.
Voici la liste des adoptants.