iota and Const Patterns
iota va const naqshlari
Bir-biriga bog'liq bo'lgan bir nechta doimiyni (masalan, holatlar ro'yxati) qo'lda raqamlash zerikarli va xatoga moyil. Go maxsus identifikator beradi — `iota`: const blokining har bir qatorida avtomatik ravishda 0dan boshlab oshib boradigan hisoblagich.
type Status int
const (
StatusPending Status = iota // 0
StatusActive // 1 (avtomatik davom etadi)
StatusClosed // 2
)Bu — DNS Resolver kursidagi maxsus turlar (type DNSCache map[...]...) g'oyasining davomi: Statusni intning o'zi emas, alohida tur qilib e'lon qilish, tasodifan boshqa int qiymatlarni Status o'rnida ishlatib qo'yishning oldini oladi. iotaning yana bir kuchli qo'llanilishi — bit-siljish orqali o'lchov birliklarini hisoblash:
const (
_ = iota // 0 ni tashlab yuborish
KB = 1 << (10 * iota) // 1 << 10 = 1024
MB // 1 << 20
GB // 1 << 30
)Har bir qatorda iota qiymati oshib boradi (hatto ifoda takrorlanmasa ham — MB va GB KBdagi bir xil formulani meros qilib oladi, faqat iotaning yangi qiymati bilan). Birinchi qatordagi _ — natijani butunlay rad etish, chunki 1 << 0 = 1 bizga kerak emas.
>_ Exercise
Status int turini va iota yordamida StatusPending (0), StatusActive (1), StatusClosed (2) doimiylarini e'lon qiling. Statusga String() string metodini qo'shing — u har bir holat uchun mos kichik harfli nomni ("pending", "active", "closed") qaytaradi. Shundan so'ng, _ = iota naqshi bilan KB = 1 << (10 * iota), MB va GB doimiylarini e'lon qiling.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
iota bog'liq doimiylar guruhini avtomatik raqamlaydi. Uni maxsus turlar bilan (type Status int) birlashtirib, tur-xavfsiz "enum"lar yaratish mumkin; bit-siljish bilan birlashtirilganda esa o'lchov birliklari (KB, MB, GB) kabi ketma-ket, formulaga asoslangan qiymatlarni hosil qilish mumkin.
NEXT UP
Scope and Shadowing
$ go run main.go
Kodingizni ishga tushiring