
إذا كنت تستخدم علامة ميزة GO ، فيرجى التفكير في إضافة نفسك في قائمة المتبنين.
هذا الفعل البسيط يعزز بشكل كبير رؤية المشروع ومصداقية ، مما يجعل مساهمة كبيرة في تقدمه.إذا كنت تريد أن تدعمني وتذهب لعلم الميزة ، فيمكنك أيضًا أن تصبح راعياً.
Go Meature Flag هو حل خفيف الوزن ومفتوح المصدر يوفر تطبيقًا بسيطًا وكاملًا لعلامة الميزة.
تم بناء الحل لتسهيل استخدام أعلام الميزات في الكود الخاص بك مع أسهل إعداد ممكن.
في الأصل ، تم تصميم علامة ميزة GO كحل حصريًا للغة GO . من خلال التقييس الجديد لعلامات الميزات بواسطة مشروع OpenFeature ، يتوفر الحل الآن للغات المتعددة (قائمة اللغات المدعومة) من خلال خادم API بسيط يسمى وكيل الترحيل ، والذي يمكن استضافته.
نصيحة
إذا لم تكن معتادًا على أعلام الميزات ، فقد كتبت مقالًا يشرح لماذا يمكن لعلامات الميزات ربط دورة التكرار الخاصة بك.
HTTP ، S3 ، Kubernetes ، انظر القائمة الكاملة ).JSON ، TOML و YAML ).S3 ، Google cloud storage ، file ، انظر القائمة الكاملة ) .webhook و slack ) . رمز هذا العرض التوضيحي متاح في examples/demo .
مهم
قبل البدء في استخدام علامة ميزة GO ، يجب أن تقرر ما إذا كنت ترغب في استخدام SDKs مفتوحة أو إذا كنت ترغب في استخدام علامة GO MENETS كوحدة GO.
نوصي باستخدام الترحيل proxy لحل إدارة العلم المركزي وتقييمه ، ويمكّن دعم اللانهي المتعدد ، ويدمج بسلاسة مع SDKs المفتوحة.
هذه هي أفضل طريقة للحصول على إمكانات كاملة لعلامة ميزة 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 و 80 ٪ من التباين my-old-feature .
قم بإنشاء ملف YAML جديد يحتوي على تكوين وكيل الترحيل الخاص بك.
listen : 1031
pollingInterval : 1000
startWithRetrieverError : false
retriever :
kind : file
path : /goff/flag-config.yaml
exporter :
kind : log وسنقوم بتشغيل وكيل الترحيل محليًا لإتاحة واجهة برمجة التطبيقات.
سيكون المنفذ الافتراضي 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في تهيئة التطبيق ، يجب عليك إنشاء عميل باستخدام ميزة Open 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 و 80 ٪ من التباين my-old-feature .
أولاً ، تحتاج إلى تهيئة 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 Go ليكون مكتبة Golang فقط ، ولكنها تحد من النظام الإيكولوجي أكثر من اللازم.
لكي نكون متوافقة مع المزيد من اللغات التي قمنا بتنفيذها في وكيل ترحيل ميزة GO. إنها خدمة يمكنك استضافتها والتي توفر واجهة برمجة تطبيقات لتقييم أعلامك ، يمكنك الاتصال بها باستخدام HTTP للحصول على اختلافك.
نظرًا لأننا نؤمن بالتوحيد ، فإننا ننفذ أيضًا مزودي OpenFeature للتفاعل مع واجهة برمجة التطبيقات هذه باللغة التي تختارها.
(لا يزال OpenFeature في مرحلة مبكرة ، لذلك لا يتم دعم جميع اللغات وتتوقع بعض التغييرات في المستقبل)
في الوقت الحالي ، لدينا مزودون لـ:
| لغة | مصدر مزود | إصدار |
|---|---|---|
| يذهب | الذهاب مزود | |
| جافا / كوتلين (خادم) | مزود جافا | |
| Android / Kotlin (عميل) | مزود كوتلين | |
| JavaScript/TypeScript (خادم) | مزود الخادم | |
| JavaScript/TypeScript (عميل) | مزود العميل | |
| بيثون | مزود بيثون | |
| .شبكة | .NET مزود | |
| روبي | مزود روبي | |
| سريع | موفر سريع | |
| PHP | مزود PHP |
تدعم الوحدة طرقًا مختلفة لاسترداد ملف العلم.
المستردون المتاحون هم:
انظر القائمة الكاملة ومزيد من المعلومات.
تتمثل ميزة Go Meature Flag Core في مركزية جميع أعلام الميزات الخاصة بك في ملف واحد وتجنب استضافة وصيانة خادم الواجهة الخلفية لإدارتها.
يجب أن يكون ملفك ملف YAML أو JSON أو TOML مع قائمة بالأعلام (أمثلة: YAML ، JSON ، TOML ) .
أسهل طريقة لإنشاء ملف التكوين الخاص بك هي استخدام محرر علامة ميزة GO متاح على https://editor.gofeatureflag.org.
إذا كنت تفضل القيام بذلك يدويًا ، فيرجى اتباع التعليمات أدناه.
يبدو أن تكوين العلم هكذا:
# 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 trueuserId eq "12345" يعد سياق التقييم في نظام الإعلام بالميزات أمرًا ضروريًا لتحديد إخراج تقييم علامة الميزة. إنها مجموعة من البيانات ذات الصلة حول الظروف التي يتم بموجبها إجراء التقييم. يمكن توفير هذه البيانات من خلال مزيج من المعلومات الثابتة (اسم الخادم ، IP ، إلخ ...) والمدخلات الديناميكية (معلومات حول المستخدم الذي ينفذ الإجراء ، إلخ ...) ، إلى جانب معلومات الحالة التي يتم تنفيذها ضمنيًا من خلال تنفيذ البرنامج.
عند استخدام علامة ميزة GO ، من الضروري في كثير من الأحيان تخصيص تجربة المستخدمين المختلفين. هذا هو المكان الذي يلعب فيه مفهوم مفتاح الاستهداف . مفتاح الاستهداف هو معرف فريد يمثل سياق التقييم (البريد الإلكتروني ، معرف الجلسة ، بصمة أو أي شيء متسق) ، مما يضمن تعرضها باستمرار لنفس التباين في الميزة ، حتى عبر زيارات أو جلسات متعددة.
على سبيل المثال ، يضمن Go Meature Scal أنه في الحالات التي يتم فيها طرح ميزة إلى نسبة مئوية من المستخدمين ، استنادًا إلى مفتاح الاستهداف ، سيرون نفس الاختلاف في كل مرة يواجهون فيها علامة الميزة.
يعد مفتاح الاستهداف جزءًا أساسيًا من سياق التقييم لأنه يؤثر بشكل مباشر على تحديد أي متغير الميزة يتم تقديمه لمستخدم معين ، ويحافظ على هذه الاستمرارية بمرور الوقت. للقيام بذلك ، يمكنك الذهاب لعلم الميزة للقيام بتجزئة لتحديد ما إذا كان يمكن للعلم أن تنطبق على سياق التقييم هذا أم لا.
نوصي باستخدام علامة تجزئة إن أمكن.
يتم تحديد كل من مستهدفة علامة الميزات والتمريرات من قبل المستخدم الذي تنقله إلى مكالمات التقييم الخاصة بك.
في بعض الحالات ، قد تحتاج إلى دلو المستخدمين استنادًا إلى مفتاح مختلف ، على سبيل المثال teamId ، بحيث يتعرض المستخدمون داخل الفريق نفسه لنفس تباين العلم والحصول على تجربة متسقة.
يمكن تحقيق ذلك من خلال تحديد حقل bucketingKey في تكوين العلامة. عند وجودها ، سيتم استخراج القيمة المقابلة لـ bucketingKey من السمات ، وتلك القيمة المستخدمة في التجزئة وتحديد النتيجة بدلاً من targetingKey .
الاختلافات هي القيم المختلفة الممكنة لعلامة الميزة.
يمكن أن تدير علامة الميزة أكثر من مجرد قيم 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.
يرحب هذا المشروع بالمساهمات من المجتمع. إذا كنت مهتمًا بالمساهمة ، راجع دليل المساهمين للحصول على بعض النصائح المفيدة.
نظرًا لأن صوت الجميع مهم نريد أن نسمع من المجتمع.
لهذا السبب ، نطلق اجتماعًا مجتمعيًا كل أسبوعين ، وهو المكان المثالي لمناقشة علم ميزة مستقبل GO ويساعدك على استخدامه بكامل إمكانية.
| اسم | وقت الاجتماع | ملاحظات الاجتماع | المناقشات |
|---|---|---|---|
| اذهب إلى اجتماع مجتمع العلم الميزة | كل يوم خميس الساعة 10:00 صباحًا بتوقيت شرق الولايات المتحدة / 16:00 | مستند جوجل | رابط VC (لقاء) |
شكرا جزيلا للمساهمين لدينا.
كن راعياً وأظهر دعمكم للذهاب إلى علامة الميزة.
هؤلاء هم رعاة رائع حقا!

إذا كنت تستخدم go-feature-flag ، فنحن نشجعك على تضمين اسم شركتك في هذه القائمة. هذا الفعل البسيط يعزز بشكل كبير رؤية المشروع ومصداقية ، مما يجعل مساهمة كبيرة في تقدمه. للقيام بذلك ، يرجى إضافة نفسك إلى المتبنين.
هنا هي قائمة المتبنين.