Exists or Not?
Bormi yoki yo'qmi?
m := map[string]string{"host": "localhost"}
val, ok := m["host"] // "localhost", true
val, ok = m["missing"] // "", false"Kalit nol qiymat bilan mavjud" bilan "kalit umuman mavjud emas"ni ajratish uchun comma-ok andazasidan foydalaniladi. Ikkinchi qaytish qiymati — bool. Agar kalit mapda bo'lsa true, aks holda false.
Bu muhim, chunki yo'q kalitni o'qish xato bermaydi, u qiymat turining nol qiymatini qaytaradi. map[string]int ham "kalit 0 qiymat bilan mavjud", ham "kalit hech qachon o'rnatilmagan" holatlarida 0 qaytaradi. Comma-ok tekshiruvisiz farqni bila olmaysiz.
Kalitni olib tashlash uchun o'rnatilgan deletedan foydalaning:
delete(m, "host") // yo'qoldi
delete(m, "nope") // hech narsa qilmaydi, panic yo'qdeleteni chaqirish har doim xavfsiz. Agar kalit mavjud bo'lmasa, hech narsa sodir bo'lmaydi. Nimadir haqiqatan olib tashlanganini bilish kerak bo'lganda uni comma-ok tekshiruvi bilan birlashtiring.
>_ Exercise
Sizda inventar map'i (map[string]int) bor, bunda kalitlar SKU'lar, qiymatlar esa qo'ldagi birliklar soni. 0 — to'g'ri son: bu mahsulotni sotamiz, lekin u tugagan degani. Yo'q kalit esa bu SKU haqida hech qachon eshitmaganimizni bildiradi.
Ikkita funksiya yozing:
- •
CheckStock(inventory map[string]int, sku string) string. Quyidagilardan birini qaytaradi: - •
"unknown SKU"— agar SKU mapda bo'lmasa - •
"out of stock"— agar SKU mapda0qiymat bilan bo'lsa - •
"N in stock"(masalan"42 in stock") — agar SKU mapda musbat qiymat bilan bo'lsa - •
Discontinue(inventory map[string]int, sku string) bool. SKU'ni mapdan olib tashlaydi va u mavjud bo'lsatrue, bo'lmasafalseqaytaradi
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
"Nol qiymat bilan mavjud"ni "mavjud emas"dan ajratish uchun val, ok := m[key] dan foydalaning. Olib tashlash uchun delete(m, key) dan foydalaning.
NEXT UP
Count Everything
$ go run main.go
Kodingizni ishga tushiring