GoDasturchi
Project: Feature Flag Lookup

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.

example.go
if f := store.Find("new-checkout"); f != nil {
	f.Rollout = 50 // joyida 50% gacha oshirish
}
store.Remove("legacy-banner") // uni chetlashtirish

Find 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

example.go
func (s *Store) Find(name string) *Flag
  • Mos Flagga pointer qaytaring, shunda chaqiruvchi Rolloutni joyida oshira oladi
  • Hech qanday flag mos kelmasa nil qaytaring

Remove

example.go
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.

Hints (0/4)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
if f := store.Find("new-checkout"); f != nil {
	f.Rollout = 50 // joyida 50% gacha oshirish
}
store.Remove("legacy-banner") // uni chetlashtirish

Find 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

example.go
func (s *Store) Find(name string) *Flag
  • Mos Flagga pointer qaytaring, shunda chaqiruvchi Rolloutni joyida oshira oladi
  • Hech qanday flag mos kelmasa nil qaytaring

Remove

example.go
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.

Hints (0/4)

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