
Wenn Sie das GO -Feature -Flag verwenden, sollten Sie sich in der Liste der Adoptter hinzufügen.
Diese einfache Handlung steigert die Sichtbarkeit und Glaubwürdigkeit des Projekts erheblich und leistet einen wesentlichen Beitrag zu seinem Fortschritt.Wenn Sie mich unterstützen und GO -Feature -Flaggen haben möchten, können Sie auch Sponsor werden.
Go Feature Flag ist eine leichte und open-Source-Lösung, die eine einfache und vollständige Feature-Flag-Implementierung bietet.
Die Lösung wurde entwickelt, um die Verwendung von Feature -Flags in Ihrem Code mit dem möglichst möglichst möglichst möglichst möglichten Einrichtungen zu ermöglichen.
Ursprünglich wurde das GO -Feature -Flag als Lösung ausschließlich für die GO -Sprache entwickelt. Mit der neuen Standardisierung von Feature -Flags durch das OpenFeature -Projekt ist die Lösung jetzt für mehrere Sprachen (Liste der unterstützten Sprachen) über einen einfachen API -Server namens Relay Proxy verfügbar, der gehostet werden kann.
Tipp
Wenn Sie nicht mit Feature -Flags vertraut sind, habe ich einen Artikel geschrieben, in dem erklärt wird, warum Feature -Flags Ihren Iterationszyklus befestigen können.
HTTP , S3 , Kubernetes , siehe vollständige Liste ).JSON , TOML und YAML ).S3 , Google cloud storage , file , siehe vollständige Liste ) .webhook und slack ) . Der Code dieser Demo ist in examples/demo -Repository verfügbar .
Wichtig
Bevor Sie mit der Verwendung von GO -Feature -Flag beginnen, sollten Sie entscheiden, ob Sie SDKs Open -Feature verwenden möchten oder ob Sie das GO -Feature -Flag als GO -Modul verwenden möchten.
Wir empfehlen die Verwendung des Relay-Proxy für eine zentrale Flaggenmanagement- und -bewertungslösung, die die Unterstützung von Multisprachigern ermöglicht und nahtlos in die Open-Feature-SDKs integriert wird.
Dies ist der beste Weg, um das vollständige Potenzial der GO -Feature -Flagge zu erhalten.
Wenn Ihr Projekt ausschließlich in Go ist, ist das Go -Modul eine Option. Die Flag -Bewertung wird direkt in Ihrem GO -Code durchgeführt.
Erstellen Sie eine neue YAML -Datei mit Ihrer ersten Flag -Konfiguration.
# 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 Diese Flagge hat die Verwendung dieser Flagge aufgeteilt, 20% werden die Variation my-new-feature und 80% die Variation my-old-feature verwenden.
Erstellen Sie eine neue YAML -Datei mit der Konfiguration Ihres Relay -Proxy.
listen : 1031
pollingInterval : 1000
startWithRetrieverError : false
retriever :
kind : file
path : /goff/flag-config.yaml
exporter :
kind : log Und wir werden den Staffelproxy lokal ausführen, um die API zur Verfügung zu stellen.
Der Standardport beträgt 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
Wenn Sie Docker nicht verwenden möchten, um den Relay -Proxy zu installieren, können Sie andere Möglichkeiten befolgen, um ihn in der Dokumentation zu installieren.
In diesem Beispiel verwenden wir den NodeJS SDK , können jedoch andere Sprachen hier überprüfen.
npm i @openfeature/server-sdk @openfeature/go-feature-flag-providerIn Ihrer App -Initialisierung müssen Sie einen Client mit der Open -Funktion SDK erstellen und initialisieren.
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' ) Jetzt können Sie Ihre Flags überall in Ihrem Code mit diesem Client bewerten.
// 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 Erstellen Sie eine neue YAML -Datei mit Ihrer ersten Flag -Konfiguration.
# 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 Diese Flagge hat die Verwendung dieser Flagge aufgeteilt, 20% werden die Variation my-new-feature und 80% die Variation my-old-feature verwenden.
Zunächst müssen Sie den ffclient mit dem Speicherort Ihrer Backend -Datei initialisieren.
err := ffclient . Init (ffclient. Config {
PollingInterval : 3 * time . Second ,
Retriever : & fileretriever. Retriever {
Path : "flag-config.goff.yaml" ,
},
})
defer ffclient . Close ()In diesem Beispiel wird eine Datei von Ihrem lokalen Computer geladen und die Flags alle 3 Sekunden aktualisiert (wenn Sie den PollingInterval weglassen, beträgt der Standardwert 60 Sekunden).
ℹ Info
Dies ist eine grundlegende Konfiguration, um lokal zu testen. In der Produktion ist es besser, einen Remote -Ort zu verwenden, um Ihre Feature -Flag -Konfigurationsdatei zu speichern.
Sehen Sie sich die Liste der verfügbaren Optionen auf der Seite "Feature Flag -Datei" an.
Jetzt können Sie Ihre Flags überall in Ihrem Code bewerten.
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
} Die vollständige Dokumentation finden Sie unter https://docs.gofeaturefflag.org
Weitere Beispiele finden Sie in den Beispielen/ Verzeichnissen.
Ursprünglich wurde die Feature -Flagge als Golang -Bibliothek gebaut, aber das Ökosystem begrenzt zu sehr.
Um mit mehr Sprachen kompatibel zu sein, haben wir den GO -Feature -Flag -Relay -Proxy implementiert. Es ist ein Dienst, den Sie hosten können, der eine API zur Bewertung Ihrer Flags anbietet. Sie können ihn mit HTTP anrufen, um Ihre Variation zu erhalten.
Da wir an Standardisierung glauben, implementieren wir auch OpenFeature -Anbieter, um mit dieser API in der Sprache Ihrer Wahl zu interagieren.
(OpenFeature befindet sich noch in einem frühen Stadium, sodass nicht alle Sprachen unterstützt werden und in Zukunft einige Änderungen erwarten.)
Im Moment haben wir Anbieter für:
| Sprache | Anbieterquelle | Version |
|---|---|---|
| Gehen | Go Anbieter | |
| Java / Kotlin (Server) | Java -Anbieter | |
| Android / Kotlin (Client) | Kotlin -Anbieter | |
| JavaScript/TypeScript (Server) | Serveranbieter | |
| JavaScript/TypeScript (Client) | Kundenanbieter | |
| Python | Python -Anbieter | |
| .Netto | .NET -Anbieter | |
| Rubin | Ruby Provider | |
| Schnell | Swift -Anbieter | |
| Php | PHP -Anbieter |
Das Modul unterstützt verschiedene Möglichkeiten zum Abrufen der Flag -Datei.
Die verfügbaren Retriever sind:
Siehe die vollständige Liste und weitere Informationen.
GO -Feature -Flag -Kernfunktion besteht darin, alle Ihre Feature -Flags in einer einzelnen Datei zu zentralisieren und ein Backend -Server zu vermeiden, um diese zu verwalten.
Ihre Datei sollte eine YAML , JSON oder TOML -Datei mit einer Liste von Flags sein (Beispiele: YAML , JSON , TOML ) .
Der einfachste Weg, um Ihre Konfigurationsdatei zu erstellen, besteht darin, den GO -Feature -Flag -Editor zu verwenden, der unter https://editor.gofeatureflag.org verfügbar ist.
Wenn Sie es lieber manuell tun, folgen Sie bitte der folgenden Anweisung.
Eine Flag -Konfiguration sieht Folgendes aus:
# 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.100ZAusführliche Informationen zu den Feldern, die zum Erstellen eines Flags erforderlich sind, finden Sie in der Dokumentation.
Das Abfrageformat basiert auf der nikunjy/rules -Bibliothek.
Alle Operationen können in Kapital- oder Kleinbuchstaben geschrieben werden (z. eq oder EQ können verwendet werden).
Logische Operationen unterstützt sind AND OR .
Vergleichen Sie den Ausdruck und ihre Definitionen ( a|b bedeutet, dass Sie entweder eine der beiden a oder b verwenden können):
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" Ein Bewertungskontext in einem Merkmals -Markierungssystem ist entscheidend für die Ermittlung der Ausgabe einer Merkmalsflag -Bewertung. Es handelt sich um eine Sammlung relevanter Daten über die Bedingungen, unter denen die Bewertung vorgenommen wird. Diese Daten können über eine Mischung aus statischen Informationen (Servernamen, IP usw.) und dynamischen Eingängen (Informationen über den Benutzer, der die Aktion usw. ausführen) sowie über staatliche Informationen, die implizit durch die Ausführung des Programms durchgeführt werden, geliefert werden.
Bei der Verwendung von GO -Feature -Flag ist häufig erforderlich, um die Erfahrung für verschiedene Benutzer zu personalisieren. Hier kommt das Konzept eines Zielschlüssels ins Spiel. Ein Targeting -Schlüssel ist ein eindeutiger Kennung, der den Kontext der Bewertung darstellt (E -Mail, Sitzungs -ID, ein Fingerabdruck oder alles, was konsistent ist) , um sicherzustellen, dass sie konsequent derselben Variation eines Merkmals ausgesetzt sind, auch über mehrere Besuche oder Sitzungen.
Zum Beispiel stellt das GO -Feature -Flag sicher, dass in Fällen, in denen eine Funktion auf einen Prozentsatz der Benutzer eingeführt wird, basierend auf dem Targeting -Schlüssel, bei denen jedes Mal die gleiche Variation angezeigt wird, wenn sie auf das Feature -Flag stoßen.
Der Targeting -Schlüssel ist ein grundlegender Bestandteil des Bewertungskontexts, da er direkt die Bestimmung der Merkmalsvariante einem bestimmten Benutzer auswirkt und diese Kontinuität im Laufe der Zeit behauptet. Um dies zu tun, um einen Hash zu machen, um zu definieren, ob das Flag für diesen Bewertungskontext gelten kann oder nicht.
Wir empfehlen, wenn möglich einen Hash zu verwenden.
Das Feature -Flag -Targeting und die Rollouts werden vom Benutzer festgelegt, den Sie an Ihre Bewertungsaufrufe übergeben.
In einigen Fällen müssen Sie möglicherweise einen Bucket -Benutzer basierend auf einem anderen Schlüssel, z. B. einer teamId , basierend auf derselben Taste, sodass Benutzer innerhalb desselben Teams derselben Flag -Variation ausgesetzt und ein konsistentes Erlebnis ausgesetzt werden.
Dies kann erreicht werden, indem das bucketingKey -Feld in der Flag -Konfiguration definiert wird. In Bezug auf die Vorhandensein wird der Wert, der dem bucketingKey entspricht, aus den Attributen extrahiert, und der Wert, der für das Hashing und die Bestimmung des Ergebnisses anstelle des targetingKey verwendet wird.
Variationen sind die verschiedenen Werte für ein Merkmalsflag.
Go Feature Flag kann mehr als nur boolean Werte verwalten. Der Wert Ihrer Flagge kann die folgenden Typen sein:
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 flagVariationsmethoden nehmen den Feature -Flag -Schlüssel , einen Bewertungskontext und einen Standardwert an.
Warum brauchen wir einen Standardwert? Wenn wir während der Bewertung des Flags einen Fehler haben, werden wir den Standardwert zurückgeben, Sie erhalten immer eine Wertrendite aus der Funktion und wir werden niemals einen Fehler werfen.
Wenn die Flagge your.feature.key nicht existiert, ist das Ergebnis false .
Beachten Sie, dass das Ergebnis immer einen nutzbaren Wert liefert.
Ein kritischer Bestandteil jeder neuen Funktionsfunktionen ist das Orchestrieren des tatsächlichen Startplans zwischen Produkt-, Engineering- und Marketingteams.
Durch die Bereitstellung leistungsstarker Benutzererlebnisse müssen Software -Teams in der Regel komplexe Veröffentlichungen verwalten und manuelle Aktualisierungen zu unpraktischen Zeiten erstellen.
Aber es muss nicht, dass Sie eine komplexe Rollout -Strategie haben, wenn Sie einen Lebenszyklus für Ihre Flaggen haben.
Wenn Sie informiert werden möchten, wenn sich ein Flag geändert hat, können Sie einen Notifier konfigurieren.
Ein Notifier sendet eine Benachrichtigung an das Zielsystem, um sie darüber zu informieren, dass eine neue Flag -Konfiguration geladen wurde.
GO -Feature -Flag kann mehr als einen Notifier gleichzeitig verarbeiten.
Verfügbare Notifiers sind:
Mit dem GO -Feature -Flag können Sie Daten zur Verwendung Ihrer Flags exportieren.
Es sammelt alle Variationsereignisse und kann diese Ereignisse an mehreren Orten speichern:
Derzeit unterstützen wir nur Feature -Events.
Es repräsentiert individuelle Flaggenbewertungen und gilt als "vollständige Treue" -Ereignisse.
Ein Beispiel -Funktionsereignis unten:
{
"kind" : " feature " ,
"contextKind" : " anonymousUser " ,
"userKey" : " ABCD " ,
"creationDate" : 1618228297 ,
"key" : " test-flag " ,
"variation" : " Default " ,
"value" : false ,
"default" : false ,
"source" : " SERVER "
}Das Format der Daten wird in der Dokumentation beschrieben. Die Ereignisse werden in großen Mengen gesammelt und gesendet, um zu vermeiden, dass Ihr Exporteur spammen.
Ein Befehlszeilen-Tool steht Ihnen zur Verfügung, mit denen Sie Ihre Konfigurationsdatei abgeben: GO-Feature-Flag-Lint.
Dieses Projekt begrüßt Beiträge der Community. Wenn Sie an einem Beitrag interessiert sind, finden Sie im Leitfaden der Mitwirkenden einige hilfreiche Tipps.
Da die Stimme aller wichtig ist, wollen wir von der Community zurückhören.
Aus diesem Grund starten wir alle 2 Wochen ein Community -Meeting und es ist der perfekte Ort, um die Zukunft von GO -Feature -Flaggen zu besprechen und Ihnen dabei zu helfen, sie mit vollem Potenzial auszuschöpfen.
| Name | Besprechungszeit | Treffen mit Notizen | Diskussionen |
|---|---|---|---|
| Go Feature Flag Community Meeting | Jeden Donnerstag um 10:00 Uhr ET / 16:00 CET | Google Doc | VC Link (Meet) |
Vielen Dank an unsere Mitwirkenden.
Werden Sie Sponsor und zeigen Sie Ihre Support to Go -Feature -Flagge.
Das sind unsere wirklich coolen Sponsoren!

Wenn Sie go-feature-flag verwenden, empfehlen wir Ihnen, den Namen Ihres Unternehmens in diese Liste aufzunehmen. Diese einfache Handlung steigert die Sichtbarkeit und Glaubwürdigkeit des Projekts erheblich und leistet einen wesentlichen Beitrag zu seinem Fortschritt. Bitte fügen Sie sich zu Adoptierern hinzu.
Hier ist die Liste der Adoptierer.