Project: Rolling Out a Flag
Loyiha: Flagni bosqichma-bosqich chiqarish
Yakuniy loyihaning so'nggi qismi. Store flaglarni yoza, qidira va o'chira oladi, lekin hech qanday metod funksiya yoqiqligini hal qilish uchun o'qimaydi, va Rollout maydoni uni Flagga qo'shganingizdan beri ishlatilmagan.
IsEnabled aynan shu uchun. Siz kamdan-kam hollarda funksiyani hamma uchun bir vaqtda yoqasiz: uni foydalanuvchilarning 5%iga chiqarasiz, kuzatasiz, keyin 25%, keyin 100%. Shuning uchun savol "bu yonikmi?" emas, "bu shu foydalanuvchi uchun yonikmi?"
if store.IsEnabled("new-checkout", user.ID) {
renderNewCheckout(w, user)
} else {
renderOldCheckout(w, user)
}Har bir foydalanuvchi uchun barqaror savat
Qiziqarli qismi — rollout, va u yopishqoq bo'lishi kerak. Yangi checkout'ga tushgan foydalanuvchi yangilashda orqaga qaytarilmasligi kerak, shuning uchun tasodifiy narsa mos emas. Buning o'rniga foydalanuvchidan qat'iy son hosil qiling:
userID%100 < f.RolloutuserID % 100 — 100ga bo'lgandagi qoldiq, shuning uchun ID qanchalik katta bo'lmasin u har doim 0 dan 99gacha, va bir xil ID har doim bir xil savatni beradi.
Rollout — o'sha 100 ta savatdan nechtasi 0dan boshlab "ichkarida" hisoblanishi. 30da, 0 dan 29gacha savatlar o'tadi: foydalanuvchilarning taxminan 30%i, har chaqiruvda bir xil 30%.
Chetlarga alohida holat kerak emas. 100da har bir savat undan past, shuning uchun hamma ichkarida. 0da hech qanday savat yo'q, shuning uchun hech kim ichkarida emas.
>_ Exercise
IsEnabledni *Store ustida metod sifatida yozing. Set, Find, va Removega ega to'liq store allaqachon berilgan.
Metod
func (s *Store) IsEnabled(name string, userID int) boolTalablar
- •
namebo'yicha flagni qidiring. Agar u mavjud bo'lmasa,falseqaytaring (noma'lum flaglar o'chiq) - •Flagning
Enabledtugmasi o'chiq bo'lsa,Rollout100 bo'lsa hamfalseqaytaring. Tugma foizdan ustun turadi - •Aks holda,
userID % 100flagningRolloutidan past bo'lganda foydalanuvchini ichkariga qo'ying - •Bir xil
namegi flag uchun bir xiluserIDhar doim bir xil javob olishi kerak
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Bir xil kirish har doim bir xil javob olishi kerak bo'lganda, qarorni tasodifdan emas, kirishning o'zidan hosil qiling; value % n istalgan kirishni chaqiruvlar orasida hech qachon o'zgarmaydigan qat'iy savatga aylantiradi.
$ go run main.go
Kodingizni ishga tushiring