GoDasturchi
Exists or Not?

Exists or Not?

Bormi yoki yo'qmi?

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

example.go
delete(m, "host")  // yo'qoldi
delete(m, "nope")  // hech narsa qilmaydi, panic yo'q

deleteni 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 mapda 0 qiymat 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'lsa true, bo'lmasa false qaytaradi

Stuck? Reveal a hint to help you.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Exists or Not?

Bormi yoki yo'qmi?

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

example.go
delete(m, "host")  // yo'qoldi
delete(m, "nope")  // hech narsa qilmaydi, panic yo'q

deleteni 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 mapda 0 qiymat 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'lsa true, bo'lmasa false qaytaradi

Stuck? Reveal a hint to help you.

Hints (0/3)

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