Project: Feature Flag Lookup
Loyiha: Feature flag qidiruvi
Yakuniy loyihaning uchinchi qismi. Set tayyor. *Store ustida ikkita metod qoldi: Find flagni qidiradi, Remove bittasini o'chiradi.
if f := store.Find("new-checkout"); f != nil {
f.Rollout = 50 // joyida 50% gacha oshirish
}
store.Remove("legacy-banner") // uni chetlashtirishFind jonli flagni qaytaradi
Find store ichidagi flagga ishora qiluvchi *Flag qaytaradi, shuning uchun chaqiruvchining f.Rollout = 50si haqiqiysini o'zgartiradi.
Tuzoq — sikl. for _, f := range s.Flags har bir flagni fga nusxalaydi, shuning uchun &f — sliceдаги flagning emas, bir martalik nusxaning manzili. Buning o'rniga indeks bo'yicha aylanib, slice elementining manzilini qaytaring.
Flagni o'chirish
Remove mos flagni topadi, so'ng uni slices.Delete(s.Flags, i, i+1) bilan kesib tashlaydi, qisqartirilgan slicani s.Flagsga qaytadan belgilaydi. Kesgan zahoti qayting: indeksni olib tashlash keyingi har bir flagni bir pog'ona pastga suradi, shuning uchun davom etadigan sikl noto'g'ri flagga tushib qolardi.
Elementni qo'lda ham s.Flags = append(s.Flags[:i], s.Flags[i+1:]...) bilan kesib olishingiz mumkin, va bu xuddi shunday ishlaydi. slices.Delete — zamonaviy, afzal ko'rilgan yo'l: u niyatni to'g'ridan-to'g'ri bildiradi va xato qilish oson bo'lgan sinchkov append ifodasini chetlab o'tadi.
>_ Exercise
Store'ni yana ikkita metod bilan to'ldiring. Set allaqachon berilgan.
Find
func (s *Store) Find(name string) *Flag- •Mos
Flagga pointer qaytaring, shunda chaqiruvchiRolloutni joyida oshira oladi - •Hech qanday flag mos kelmasa
nilqaytaring
Remove
func (s *Store) Remove(name string)- •
Namei mos kelgan birinchi flagni olib tashlang - •Hech qanday flag mos kelmasa hech narsa qilmang
- •Qolgan flaglarning tartibini saqlang
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Slice elementiga pointer qaytarish chaqiruvchilarga nusxa o'rniga haqiqiy qiymatni o'zgartirish imkonini beradi, va slicedan o'chirish uni o'chirilgan indeks atrofida qayta qurish va surilgan indekslar sizni chalg'itishidan oldin qaytishni bildiradi.
NEXT UP
Project: Rolling Out a Flag
$ go run main.go
Kodingizni ishga tushiring