
Go Feature 플래그를 사용하는 경우 채택 자 목록에 자신을 추가하려면 고려하십시오.
이 간단한 행동은 프로젝트의 가시성과 신뢰성을 크게 향상시켜 발전에 상당한 기여를합니다.저를 지원하고 기능 깃발을 원한다면 스폰서가 될 수도 있습니다.
GO 기능 플래그는 간단하고 완전한 기능 플래그 구현을 제공하는 가볍고 오픈 소스 솔루션입니다.
이 솔루션은 가장 쉬운 설정으로 코드에서 기능 플래그 사용을 용이하게하기 위해 구축되었습니다.
원래 Go Feature Flag는 GO 언어를위한 솔루션으로 설계되었습니다. OpenFeature 프로젝트의 기능 플래그의 새로운 표준화를 통해 이제 릴레이 프록시라는 간단한 API 서버를 통해 여러 언어 (지원되는 언어 목록) 에서 솔루션을 사용할 수 있습니다.
팁
기능 플래그에 익숙하지 않은 경우 기능 플래그가 반복주기를 고정시킬 수있는 이유를 설명하는 기사를 작성했습니다.
HTTP , S3 , Kubernetes , 전체 목록 참조 ).JSON , TOML 및 YAML ).S3 , Google cloud storage , file , 전체 목록을 참조하십시오) 와 같은 다양한 목적지로 내보내십시오.webhook and slack ) . 이 데모의 코드는 examples/demo 저장소에서 사용할 수 있습니다 .
중요한
GO 기능 플래그를 사용하기 전에 Open Feature SDK를 사용하고 싶은지 또는 GO 기능 플래그를 GO 모듈로 사용하고 싶은지 결정해야합니다.
Central Flag Management and Evaluation 솔루션에는 릴레이 프로시를 사용하는 것이 좋습니다. 다중 언어 지원을 지원할 수 있으며 Open Feature SDK와 완벽하게 통합됩니다.
이것은 GO 기능 플래그의 잠재력을 충분히 얻는 가장 좋은 방법입니다.
프로젝트가 독점적으로 GO에 있으면 GO 모듈이 옵션입니다. GO 코드에서 직접 플래그 평가를 수행합니다.
첫 번째 플래그 구성이 포함 된 새 YAML 파일을 만듭니다.
# 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 이 플래그는이 깃발의 사용을 분할하고, 20%는 my-new-feature 변형을 사용하고, my-old-feature 변화를 80% 사용합니다.
릴레이 프록시의 구성이 포함 된 새 YAML 파일을 만듭니다.
listen : 1031
pollingInterval : 1000
startWithRetrieverError : false
retriever :
kind : file
path : /goff/flag-config.yaml
exporter :
kind : log 그리고 API를 사용할 수 있도록 릴레이 프록시를 로컬로 실행할 것입니다.
기본 포트는 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
Docker를 사용하여 릴레이 프록시를 설치하지 않으려면 다른 방법을 따라 문서에 설치할 수 있습니다.
이 예에서는 Nodejs SDK를 사용하고 있지만 여기에서 다른 언어를 확인할 수 있습니다.
npm i @openfeature/server-sdk @openfeature/go-feature-flag-provider앱 초기화에서 열린 기능 SDK를 사용하여 클라이언트를 생성하고 초기화해야합니다.
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' ) 이제이 클라이언트를 사용하여 코드의 어느 곳에서나 깃발을 평가할 수 있습니다.
// 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 첫 번째 플래그 구성이 포함 된 새 YAML 파일을 만듭니다.
# 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 이 플래그는이 깃발의 사용을 분할하고, 20%는 my-new-feature 변형을 사용하고, my-old-feature 변화를 80% 사용합니다.
먼저 백엔드 파일의 위치로 ffclient 초기화해야합니다.
err := ffclient . Init (ffclient. Config {
PollingInterval : 3 * time . Second ,
Retriever : & fileretriever. Retriever {
Path : "flag-config.goff.yaml" ,
},
})
defer ffclient . Close ()이 예제는 로컬 컴퓨터에서 파일을로드하고 3 초마다 플래그를 새로 고침합니다 (PollingInterval을 생략하면 기본값은 60 초입니다).
ℹ 정보
이것은 로컬로 테스트하는 기본 구성이며, 제작시 원격 장소를 사용하여 기능 플래그 구성 파일을 저장하는 것이 좋습니다.
스토어에서 사용 가능한 옵션 목록은 기능 플래그 파일 페이지를보십시오.
이제 코드의 어느 곳에서나 깃발을 평가할 수 있습니다.
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
} 전체 설명서는 https://docs.gofeatureflag.org에서 확인할 수 있습니다
예/ 디렉토리에서 더 많은 예제를 찾을 수 있습니다.
원래 Go Feature 플래그는 Golang 전용 도서관으로 만들어졌지만 생태계를 너무 제한합니다.
더 많은 언어와 호환 되려면 GO 기능 플래그 릴레이 프록시를 구현했습니다. 깃발을 평가하기 위해 API를 제공하는 것은 호스팅 할 수있는 서비스입니다. HTTP를 사용하여 호출하여 변형을 얻을 수 있습니다.
우리는 표준화를 믿기 때문에 우리는 또한 당신이 선택한 언어 로이 API와 상호 작용할 수있는 OpenFeature 제공 업체를 구현하고 있습니다.
(OpenFeature는 여전히 초기 단계에 있으므로 모든 언어가 지원되는 것은 아니며 향후 일부 변화를 기대합니다).
현재로서는 다음을 제공합니다.
| 언어 | 제공자 소스 | 버전 |
|---|---|---|
| 가다 | Go 제공자 | |
| Java / Kotlin (서버) | Java 제공 업체 | |
| Android / Kotlin (클라이언트) | Kotlin 제공 업체 | |
| JavaScript/TypeScript (서버) | 서버 제공 업체 | |
| JavaScript/TypeScript (클라이언트) | 클라이언트 제공 업체 | |
| 파이썬 | 파이썬 공급자 | |
| .그물 | .NET 제공자 | |
| 루비 | 루비 제공 업체 | |
| 스위프트 | 신속한 공급자 | |
| PHP | PHP 제공 업체 |
모듈은 플래그 파일을 검색하는 다양한 방법을 지원합니다.
사용 가능한 리트리버는 다음과 같습니다.
전체 목록과 자세한 정보를 참조하십시오.
Go Feature Flag Core 기능은 모든 기능 플래그를 단일 파일로 중앙 집중화하고 백엔드 서버를 호스팅하고 관리하여 관리하지 않도록하는 것입니다.
파일은 플래그 목록 (예 : YAML , JSON , TOML ) 이있는 YAML , JSON 또는 TOML 파일이어야합니다.
구성 파일을 만드는 가장 쉬운 방법은 https://editor.gofeatureflag.org에서 사용할 수있는 Go Feature Flag Editor를 사용하는 것입니다.
수동으로 원하는 경우 아래 지침을 따르십시오.
플래그 구성은 다음과 같습니다.
# 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.100Z플래그를 작성하는 데 필요한 필드에 대한 자세한 정보는 문서를 참조하십시오.
쿼리 형식은 nikunjy/rules 라이브러리를 기반으로합니다.
모든 작업은 대문자 또는 소문자로 작성 될 수 있습니다 (예 : eq 또는 EQ 사용할 수 있음).
지원되는 논리적 운영은 AND OR 입니다.
표현과 그 정의를 비교합니다 ( a|b 두 a 또는 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 true 선택하십시오userId eq "12345" 기능 플래그 시스템의 평가 컨텍스트는 기능 플래그 평가의 출력을 결정하는 데 중요합니다. 평가가 이루어지는 조건에 대한 관련 데이터 모음입니다. 이 데이터는 정적 정보 (서버 이름, IP 등) 와 동적 입력 (작업 수행 사용자에 대한 정보 등)과 프로그램 실행을 통해 암시 적으로 수행되는 상태 정보를 통해 제공 될 수 있습니다.
Go 기능 플래그를 사용할 때는 종종 다른 사용자의 경험을 개인화해야합니다. 이것은 타겟팅 키 의 개념이 작동하는 곳입니다. 타겟팅 키는 평가의 컨텍스트 (이메일, 세션 ID, 지문 또는 일관된 모든) 를 나타내는 고유 식별자입니다.
예를 들어, Go Feature Flag는 기능이 사용자의 백분율로 롤아웃되는 경우 타겟팅 키를 기반으로 기능 플래그가 발생할 때마다 동일한 변형이 나타납니다.
타겟팅 키는 평가 컨텍스트의 기본 부분입니다. 특정 기능 변형이 특정 사용자에게 제공되는지 결정에 직접 영향을 미치고 시간이 지남에 따라 해당 연속성을 유지합니다. 그렇게하려면 플래그가 해시를 수행하여 플래그 가이 평가 컨텍스트에 적용될 수 있는지 정의하기 위해 해시를 수행하십시오.
가능하면 해시를 사용하는 것이 좋습니다.
기능 플래그 타겟팅 및 롤아웃은 모두 평가 호출에 전달하는 사용자에 의해 결정됩니다.
경우에 따라 동일한 teamId 의 사용자가 동일한 플래그 변형에 노출되어 일관된 경험을 얻을 수 있도록 다른 키를 기반으로 사용자를 버튼 해야 할 수도 있습니다.
이것은 플래그 구성에서 bucketingKey 필드를 정의하여 달성 할 수 있습니다. 존재하는 경우, bucketingKey 에 해당하는 값은 속성에서 추출 될 것이며, targetingKey 대신 결과를 해싱 및 결정에 사용하는 해당 값이 추출됩니다.
특징 플래그의 변형은 다른 값입니다.
GO 기능 플래그는 단순한 boolean 값 이상을 관리 할 수 있습니다. 깃발의 값은 다음 유형 중 하나 일 수 있습니다.
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 flag변형 메소드는 기능 플래그 키 , 평가 컨텍스트 및 기본값을 취합니다.
기본값이 필요한 이유는 무엇입니까? 플래그 평가 중에 오류가 있으면 기본값을 반환하면 항상 함수에서 값 반환을 받고 오류가 발생하지 않습니다.
예에서는 your.feature.key 가 존재하지 않으면 결과는 false 입니다.
결과는 항상 사용 가능한 가치를 제공합니다.
모든 새로운 기능 릴리스의 중요한 부분은 제품, 엔지니어링 및 마케팅 팀 간의 실제 출시 일정을 조정하는 것입니다.
강력한 사용자 경험을 제공하려면 일반적으로 소프트웨어 팀이 복잡한 릴리스를 관리하고 불편한 시간에 수동 업데이트를해야합니다.
그러나 복잡한 롤아웃 전략을 사용하면 깃발에 대한 수명주기를 가질 수 있습니다.
플래그가 변경되었을 때 알리려면 알림을 구성 할 수 있습니다.
알림은 하나의 알림을 대상 시스템에 보내 새 플래그 구성이로드되었음을 알립니다.
GO 기능 플래그는 한 번에 하나 이상의 알림을 처리 할 수 있습니다.
사용 가능한 알림은 다음과 같습니다.
GO 기능 플래그를 사용하면 플래그 사용에 대한 데이터를 내보낼 수 있습니다.
모든 변형 이벤트를 수집하고 이러한 이벤트를 여러 위치에 저장할 수 있습니다.
현재 기능 이벤트 만 지원하고 있습니다.
개별 플래그 평가를 나타내며 "완전한 충실도"이벤트로 간주됩니다.
아래의 기능 이벤트 예 :
{
"kind" : " feature " ,
"contextKind" : " anonymousUser " ,
"userKey" : " ABCD " ,
"creationDate" : 1618228297 ,
"key" : " test-flag " ,
"variation" : " Default " ,
"value" : false ,
"default" : false ,
"source" : " SERVER "
}데이터 형식은 문서에 설명되어 있습니다. 수출업자가 스팸을 피하기 위해 이벤트가 수집되어 대량으로 전송됩니다.
구성 파일 (Go-Feature-Flag-Lint)을 보라는 데 도움이되는 명령 줄 도구를 사용할 수 있습니다.
이 프로젝트는 지역 사회의 기여를 환영합니다. 기고에 관심이 있으시면 몇 가지 유용한 팁은 기고자 안내서를 참조하십시오.
모든 사람의 목소리가 중요하기 때문에 우리는 지역 사회의 의견을 듣고 싶습니다.
이러한 이유로, 우리는 2 주마다 커뮤니티 회의를 시작하고 있으며 Go Feature 플래그의 미래에 대해 논의하고 그것을 최대한 활용할 수 있도록 완벽한 장소입니다.
| 이름 | 회의 시간 | 회의 노트 | 토론 |
|---|---|---|---|
| Go Faff Flag Community Meeting | 매주 목요일 오전 10시 ET / 16:00 CET | Google Doc | VC 링크 (Meet) |
우리의 기고자들에게 정말 감사합니다.
스폰서가되어 기능 깃발을 찾기위한 지원을 보여주십시오.
이것들은 정말 멋진 후원자입니다!

go-feature-flag 사용하는 경우이 목록에 회사 이름을 포함시키는 것이 좋습니다. 이 간단한 행동은 프로젝트의 가시성과 신뢰성을 크게 향상시켜 발전에 상당한 기여를합니다. 그렇게하려면 친절하게 입양 자에 자신을 추가하십시오.
다음은 채택 자 목록입니다.