GoDasturchi
The Lookup Table

The Lookup Table

Qidiruv jadvali

Map har bir kalitni bir qiymat bilan juftlaydi va kalit bo'yicha bir zumda qidirish imkonini beradi. /api/users yo'nalishini uning so'rovlar soniga. HTTP status 404ni "Not Found"ga. Foydalanuvchi ID u_8291ni faol sessiyaga.

"Kvartira pochta qutilari"ni tasavvur qiling. Slice bilan, qutilarning tashqarisida nom yo'q, shuning uchun o'zingiznikini topguningizcha har birini ochib tekshirasiz. Mapda esa old tomonda nom bor, shuning uchun hits["/api/users"] to'g'ridan-to'g'ri sizniki tomon boradi.

example.go
hits := make(map[string]int)
hits["/api/users"] = 1420
hits["/api/orders"] = 987

fmt.Println(hits["/api/users"]) // 1420

map[K]VK turidagi kalitlar, V turidagi qiymatlar deb o'qiladi. Kalit solishtiriladigan (comparable) bo'lishi kerak (satrlar, butun sonlar, boollar, oddiy structlar — barchasi ishlaydi). Qiymat esa istalgan narsa bo'lishi mumkin.

Bo'sh maplarni make bilan yarating. Mapning nol qiymati nil, va nil mapga yozish dasturni qulatadi (panic). map[string]int{} ham bo'sh map yaratadi, lekin u yalang'och tur map[string]intga juda o'xshab ko'rinadi. makeni afzal ko'ring.

Bundan saqlaning:

example.go
var hits map[string]int
hits["/api/users"] = 1  // panic: nil mapga yozib bo'lmaydi

Buning o'rniga:

example.go
hits := make(map[string]int)
hits["/api/users"] = 1  // ishlaydi

Yozuvlarni oldindan bilsangiz, literaldan foydalaning:

example.go
statusName := map[int]string{
	200: "OK",
	404: "Not Found",
	500: "Internal Server Error",
}

Maplar — bu ma'lumot turlari (reference types). Uni funksiyaga bersangiz, funksiyaning yozgan o'zgarishlari chaqiruvchiga ham ko'rinadi. Pointer shart emas.

>_ Exercise

Siz qisqa slug'larni to'liq URL'larga bog'laydigan kichik URL qisqartirgich yaratyapsiz. Uchta funksiya yozing:

  • NewShortener() map[string]string — yozish uchun xavfsiz bo'sh saqlagichni qaytaradi (nil map panic'i bo'lmaydi)
  • Save(store map[string]string, slug, url string) — URL'ni o'sha slug ostida saqlaydi (bir xil slugni qayta saqlash uni qayta yozadi)
  • Resolve(store map[string]string, slug string) string — slug uchun URL'ni qaytaradi

Resolve faqat allaqachon saqlangan sluglar uchun chaqirilishini taxmin qilishingiz mumkin.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Narsalarni o'rni bo'yicha emas, kalit bo'yicha qidirganda mapdan foydalaning. Yozishda panic bo'lmasligi uchun uni make bilan boshlang.

NEXT UP

Exists or Not?

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

The Lookup Table

Qidiruv jadvali

Map har bir kalitni bir qiymat bilan juftlaydi va kalit bo'yicha bir zumda qidirish imkonini beradi. /api/users yo'nalishini uning so'rovlar soniga. HTTP status 404ni "Not Found"ga. Foydalanuvchi ID u_8291ni faol sessiyaga.

"Kvartira pochta qutilari"ni tasavvur qiling. Slice bilan, qutilarning tashqarisida nom yo'q, shuning uchun o'zingiznikini topguningizcha har birini ochib tekshirasiz. Mapda esa old tomonda nom bor, shuning uchun hits["/api/users"] to'g'ridan-to'g'ri sizniki tomon boradi.

example.go
hits := make(map[string]int)
hits["/api/users"] = 1420
hits["/api/orders"] = 987

fmt.Println(hits["/api/users"]) // 1420

map[K]VK turidagi kalitlar, V turidagi qiymatlar deb o'qiladi. Kalit solishtiriladigan (comparable) bo'lishi kerak (satrlar, butun sonlar, boollar, oddiy structlar — barchasi ishlaydi). Qiymat esa istalgan narsa bo'lishi mumkin.

Bo'sh maplarni make bilan yarating. Mapning nol qiymati nil, va nil mapga yozish dasturni qulatadi (panic). map[string]int{} ham bo'sh map yaratadi, lekin u yalang'och tur map[string]intga juda o'xshab ko'rinadi. makeni afzal ko'ring.

Bundan saqlaning:

example.go
var hits map[string]int
hits["/api/users"] = 1  // panic: nil mapga yozib bo'lmaydi

Buning o'rniga:

example.go
hits := make(map[string]int)
hits["/api/users"] = 1  // ishlaydi

Yozuvlarni oldindan bilsangiz, literaldan foydalaning:

example.go
statusName := map[int]string{
	200: "OK",
	404: "Not Found",
	500: "Internal Server Error",
}

Maplar — bu ma'lumot turlari (reference types). Uni funksiyaga bersangiz, funksiyaning yozgan o'zgarishlari chaqiruvchiga ham ko'rinadi. Pointer shart emas.

>_ Exercise

Siz qisqa slug'larni to'liq URL'larga bog'laydigan kichik URL qisqartirgich yaratyapsiz. Uchta funksiya yozing:

  • NewShortener() map[string]string — yozish uchun xavfsiz bo'sh saqlagichni qaytaradi (nil map panic'i bo'lmaydi)
  • Save(store map[string]string, slug, url string) — URL'ni o'sha slug ostida saqlaydi (bir xil slugni qayta saqlash uni qayta yozadi)
  • Resolve(store map[string]string, slug string) string — slug uchun URL'ni qaytaradi

Resolve faqat allaqachon saqlangan sluglar uchun chaqirilishini taxmin qilishingiz mumkin.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Narsalarni o'rni bo'yicha emas, kalit bo'yicha qidirganda mapdan foydalaning. Yozishda panic bo'lmasligi uchun uni make bilan boshlang.

NEXT UP

Exists or Not?