
Si está utilizando el indicador de funciones GO, considere agregarse en la lista de adoptantes.
Este simple acto aumenta significativamente la visibilidad y la credibilidad del proyecto, lo que hace una contribución sustancial a su avance.Si quieres apoyarme y Go Feature Flag, también puedes convertirte en patrocinador.
El indicador de funciones GO es una solución ligera y de código abierto que proporciona una implementación de indicador de características simple y completa.
La solución se ha construido para facilitar el uso de banderas de características en su código con la configuración más fácil posible.
Originalmente, la bandera de funciones GO fue diseñada como una solución exclusivamente para el lenguaje GO . Con la nueva estandarización de los indicadores de características del proyecto OpenFeature, la solución ahora está disponible para varios idiomas (lista de idiomas compatibles) a través de un servidor API simple llamado Relay Proxy, que se puede alojar.
Consejo
Si no está familiarizado con las banderas de funciones, he escrito un artículo que explica por qué las banderas de funciones pueden fijar su ciclo de iteración.
HTTP , S3 , Kubernetes , consulte la lista completa ).JSON , TOML y YAML ).S3 , Google cloud storage , file , consulte la lista completa ) .webhook y slack ) . El código de esta demostración está disponible en examples/demo .
Importante
Antes de comenzar a usar el indicador de funciones GO, debe decidir si desea usar SDK de funciones abiertas o si desea usar el indicador de funciones GO como módulo GO.
Recomendamos usar el retransmisión de retransmisión para una solución central de gestión y evaluación de la bandera, habilita el soporte de varios idiomas y se integra perfectamente con los SDK de características abiertas.
Esta es la mejor manera de obtener el máximo potencial de la bandera de funciones GO.
Si su proyecto está exclusivamente en GO, el módulo GO es una opción. Realizará la evaluación de la bandera directamente en su código GO.
Cree un nuevo archivo YAML que contenga su primera configuración de indicador.
# 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 Esta bandera dividió el uso de esta bandera, el 20% utilizará la variación my-new-feature y el 80% de la variación my-old-feature .
Cree un nuevo archivo YAML que contenga la configuración de su proxy de retransmisión.
listen : 1031
pollingInterval : 1000
startWithRetrieverError : false
retriever :
kind : file
path : /goff/flag-config.yaml
exporter :
kind : log Y ejecutaremos el proxy de retransmisión localmente para hacer que la API esté disponible.
El puerto predeterminado será 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 no desea usar Docker para instalar el proxy de retransmisión, puede seguir otras formas de instalarlo en la documentación.
En este ejemplo, estamos utilizando el NodeJS SDK , pero puede verificar otros idiomas aquí.
npm i @openfeature/server-sdk @openfeature/go-feature-flag-providerEn la inicialización de su aplicación, debe crear un cliente utilizando el SDK de la función Open e inicializarlo.
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' ) Ahora puede evaluar sus banderas en cualquier lugar de su código utilizando este cliente.
// 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 Cree un nuevo archivo YAML que contenga su primera configuración de indicador.
# 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 Esta bandera dividió el uso de esta bandera, el 20% utilizará la variación my-new-feature y el 80% de la variación my-old-feature .
Primero, debe inicializar el ffclient con la ubicación de su archivo de backend.
err := ffclient . Init (ffclient. Config {
PollingInterval : 3 * time . Second ,
Retriever : & fileretriever. Retriever {
Path : "flag-config.goff.yaml" ,
},
})
defer ffclient . Close ()Este ejemplo cargará un archivo desde su computadora local y actualizará los indicadores cada 3 segundos (si omite el Interval Polling, el valor predeterminado es de 60 segundos).
ℹ Información
Esta es una configuración básica para probar localmente, en producción es mejor usar un lugar remoto para almacenar su archivo de configuración de bandera de funciones.
Mire la lista de opciones disponibles en la página del archivo de indicador de su función .
Ahora puede evaluar sus banderas en cualquier lugar de su código.
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 documentación completa está disponible en https://docs.gofeatureflag.org
Puede encontrar más ejemplos en los ejemplos/ directorio.
Originalmente GO Feature Blag fue construido para ser una biblioteca de Golang Only, pero limita demasiado el ecosistema.
Para ser compatible con más idiomas, hemos implementado el proxy de retransmisión del indicador de funciones GO. Es un servicio que puede alojar que proporciona una API para evaluar sus banderas, puede llamarlo con HTTP para obtener su variación.
Dado que creemos en la estandarización, también estamos implementando proveedores de OpenFeature para interactuar con esta API en el lenguaje de su elección.
(OpenFeature todavía está en una etapa temprana, por lo que no todos los idiomas son compatibles y esperan algunos cambios en el futuro)
Por ahora, tenemos proveedores para:
| Idioma | Fuente del proveedor | Versión |
|---|---|---|
| Ir | Proveedor de IR | |
| Java / Kotlin (servidor) | Proveedor de Java | |
| Android / Kotlin (cliente) | Proveedor de Kotlin | |
| JavaScript/TypeScript (servidor) | Proveedor de servidor | |
| JavaScript/TypeScript (Cliente) | Proveedor de clientes | |
| Pitón | Proveedor de python | |
| .Neto | Proveedor de .NET | |
| Rubí | Proveedor de rubí | |
| Rápido | Proveedor rápido | |
| Php | Proveedor de PHP |
El módulo admite diferentes formas de recuperar el archivo de bandera.
Los retrievers disponibles son:
Vea la lista completa y más información.
La función de Core de la bandera de funciones GO es centralizar todos los indicadores de sus características en un solo archivo y evitar alojar y mantener un servidor de backend para administrarlos.
Su archivo debe ser un archivo YAML , JSON o TOML con una lista de banderas (ejemplos: YAML , JSON , TOML ) .
La forma más fácil de crear su archivo de configuración es utilizar el editor de bandera de funciones GO disponible en https://editor.gofeatureflag.org.
Si prefiere hacerlo manualmente, siga las instrucciones a continuación.
Una configuración de bandera se ve así:
# 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.100ZPara obtener información detallada sobre los campos requeridos para crear una bandera, consulte la documentación.
El formato de consulta se basa en la biblioteca nikunjy/rules .
Todas las operaciones se pueden escribir en mayúsculas o minúsculas (por ejemplo: eq o EQ se pueden usar).
Las operaciones lógicas admitidas son AND OR .
Compare la expresión y sus definiciones ( a|b significa que puede usar uno de los dos a o 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 contexto de evaluación en un sistema de marcado de características es crucial para determinar la salida de una evaluación de indicador de características. Es una colección de datos pertinentes sobre las condiciones bajo las cuales se está realizando la evaluación. Estos datos se pueden suministrar a través de una combinación de información estática (nombre del servidor, IP, etc.) y entradas dinámicas (información sobre el usuario que realiza la acción, etc.), junto con la información de estado que se lleva a cabo implícitamente a través de la ejecución del programa.
Al usar la bandera de funciones GO, a menudo es necesario personalizar la experiencia para diferentes usuarios. Aquí es donde entra en juego el concepto de una clave de orientación . Una clave de orientación es un identificador único que representa el contexto de la evaluación (correo electrónico, ID de sesión, una huella digital o cualquier cosa que sea consistente) , asegurando que estén constantemente expuestos a la misma variación de una característica, incluso en múltiples visitas o sesiones.
Por ejemplo, el indicador de funciones GO asegura que en los casos en que una característica se implementa en un porcentaje de usuarios, en función de la clave de orientación, verán la misma variación cada vez que encuentren el indicador de características.
La clave de orientación es una parte fundamental del contexto de evaluación porque afecta directamente la determinación de qué variante de características se sirve a un usuario en particular, y mantiene esa continuidad con el tiempo. Para hacerlo, vaya a la bandera de funciones para hacer un hash para definir si el indicador puede aplicarse a este contexto de evaluación o no.
Recomendamos usar un hash si es posible.
La orientación y los despliegue del indicador de características están determinados por el usuario que pasa a sus llamadas de evaluación.
En algunos casos, es posible que deba cubrir a los usuarios en función de una clave diferente, por ejemplo, un teamId , para que los usuarios dentro del mismo equipo estén expuestos a la misma variación de la bandera y obtengan una experiencia consistente.
Esto se puede lograr definiendo el campo bucketingKey en la configuración del indicador. Cuando esté presente, el valor correspondiente al bucketingKey se extraerá de los atributos, y ese valor utilizado para hashing y determinar el resultado en lugar de la targetingKey .
Las variaciones son los diferentes valores posibles para un indicador de características.
La bandera de funciones GO puede administrar más que solo valores boolean ; El valor de su bandera puede ser cualquiera de los siguientes tipos:
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 flagLos métodos de variación toman la clave del indicador de características, un contexto de evaluación y un valor predeterminado .
¿Por qué necesitamos un valor predeterminado? Si tenemos algún error durante la evaluación del indicador, devolveremos el valor predeterminado, siempre obtendrá un retorno de valor de la función y nunca lanzaremos un error.
En el ejemplo, si el indicador your.feature.key no existe, el resultado será false .
Tenga en cuenta que el resultado siempre proporcionará un valor utilizable.
Una parte crítica de cada nuevo lanzamiento de características está orquestando el cronograma de lanzamiento real entre los equipos de productos, ingeniería y marketing.
La entrega de poderosas experiencias de usuario generalmente requiere que los equipos de software administren lanzamientos complejos y realicen actualizaciones manuales en momentos inconvenientes.
Pero no tiene que hacerlo, tener una estrategia de implementación compleja le permite tener un ciclo de vida para sus banderas.
Si desea estar informado cuando ha cambiado un indicador, puede configurar un notificador .
Un notificador enviará una notificación al sistema objetivo para informarles que se ha cargado una nueva configuración de indicador.
La bandera de funciones GO puede manejar más de un notificador a la vez.
Los notificadores disponibles son:
El indicador de funciones GO le permite exportar datos sobre el uso de sus banderas.
Recopila todos los eventos de variación y puede guardar estos eventos en varios lugares:
Actualmente, estamos apoyando solo eventos de funciones.
Representa las evaluaciones de bandera individuales y se considera eventos de "fidelidad completa".
Un evento de características de ejemplo a continuación:
{
"kind" : " feature " ,
"contextKind" : " anonymousUser " ,
"userKey" : " ABCD " ,
"creationDate" : 1618228297 ,
"key" : " test-flag " ,
"variation" : " Default " ,
"value" : false ,
"default" : false ,
"source" : " SERVER "
}El formato de los datos se describe en la documentación. Los eventos se recopilan y se envían a granel para evitar enviar spam a su exportador.
Una herramienta de línea de comandos está disponible para ayudarlo a vincular su archivo de configuración: GO-Feature-Flag-Lint.
Este proyecto da la bienvenida a las contribuciones de la comunidad. Si está interesado en contribuir, consulte la Guía de contribuyentes para obtener algunos consejos útiles.
Dado que la voz de todos es importante, queremos recibir noticias de la comunidad.
Por esta razón, estamos lanzando una reunión comunitaria cada 2 semanas y es el lugar perfecto para discutir el Future of Go Feature Flag y ayudarlo a usarla a su máximo potencial.
| Nombre | Tiempo de reunión | Notas de reunión | Discusiones |
|---|---|---|---|
| Reunión de la comunidad de la bandera de la bandera de IR | Cada dos jueves a las 10:00 a.m. ET / 16:00 CET | Google Doc | VC Link (Meet) |
Muchas gracias a nuestros contribuyentes.
Conviértase en patrocinador y muestre su bandera de funciones de soporte para ir.
¡Estos son nuestros patrocinadores realmente geniales!

Si está utilizando go-feature-flag , le recomendamos que incluya el nombre de su empresa en esta lista. Este simple acto aumenta significativamente la visibilidad y la credibilidad del proyecto, lo que hace una contribución sustancial a su avance. Para hacerlo, agrégase amablemente a los adoptantes.
Aquí está la lista de adoptantes.