GoDasturchi
Basic Key-Value Store

Basic Key-Value Store

Asosiy kalit-qiymat ombori

Har bir kesh — o'z mohiyatida oddiy "kalit-qiymat" ombori: siz bir NARSAGA (kalit) bog'liq boshqa bir NARSANI (qiymat) saqlaysiz, va keyin o'sha kalit orqali qiymatni tezda topasiz — xuddi lug'atdagi so'z va uning ta'rifi kabi.

example.go
package main

import "fmt"

// Cache — eng oddiy kalit-qiymat ombori
type Cache struct {
	data map[string]string
}

func NewCache() *Cache {
	return &Cache{data: make(map[string]string)}
}

func (c *Cache) Set(key, value string) {
	c.data[key] = value
}

func (c *Cache) Get(key string) (string, bool) {
	value, ok := c.data[key]
	return value, ok
}

func (c *Cache) Delete(key string) {
	delete(c.data, key)
}

func main() {
	cache := NewCache()
	cache.Set("user:1", "Aziz")

	value, ok := cache.Get("user:1")
	fmt.Println(value, ok)
}

Bu — "Maps" darsida ko'rgan eng asosiy naqsh, endi Cache nomi ostida, o'ziga xos METODLAR (Set, Get, Delete) bilan o'ralgan ("Encapsulation" darsini eslang). Bu o'rash — keyingi darslarda TTL, LRU kabi qo'shimcha mantiqni qo'shganda, tashqi kod (cache.Set(...) chaqiruvchi) hech narsani O'ZGARTIRMASDAN, ICHKI ishlashni murakkablashtira olishimizni ta'minlaydi.

Get — (qiymat, bool) juftligini qaytaradi ("Comma-ok Idiom" darsini eslang): bu "kalit topildimi yo'qmi" degan savolga aniq javob beradi, chunki bo'sh satr ("") HAM to'g'ri qiymat bo'lishi mumkin — shuning uchun faqat qiymatning o'zi YETARLI emas.

>_ Exercise

Cache'ga barcha kalitlarni ro'yxat sifatida olish imkonini qo'shing.

  • Keys() []string metodini yozing: c.data bo'ylab yurib, har bir kalitni natija slice'ga qo'shing
  • Uchta kalitni Set qiling, so'ng len(cache.Keys())ni chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Cache'ning asosiy qismi — oddiy xarita ustiga qurilgan Set/Get/Delete metodlari; bu inkapsulyatsiya keyingi darslarda qo'shiladigan murakkab mantiqni tashqi koddan yashirish imkonini beradi.

NEXT UP

TTL & Expiration

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Basic Key-Value Store

Asosiy kalit-qiymat ombori

Har bir kesh — o'z mohiyatida oddiy "kalit-qiymat" ombori: siz bir NARSAGA (kalit) bog'liq boshqa bir NARSANI (qiymat) saqlaysiz, va keyin o'sha kalit orqali qiymatni tezda topasiz — xuddi lug'atdagi so'z va uning ta'rifi kabi.

example.go
package main

import "fmt"

// Cache — eng oddiy kalit-qiymat ombori
type Cache struct {
	data map[string]string
}

func NewCache() *Cache {
	return &Cache{data: make(map[string]string)}
}

func (c *Cache) Set(key, value string) {
	c.data[key] = value
}

func (c *Cache) Get(key string) (string, bool) {
	value, ok := c.data[key]
	return value, ok
}

func (c *Cache) Delete(key string) {
	delete(c.data, key)
}

func main() {
	cache := NewCache()
	cache.Set("user:1", "Aziz")

	value, ok := cache.Get("user:1")
	fmt.Println(value, ok)
}

Bu — "Maps" darsida ko'rgan eng asosiy naqsh, endi Cache nomi ostida, o'ziga xos METODLAR (Set, Get, Delete) bilan o'ralgan ("Encapsulation" darsini eslang). Bu o'rash — keyingi darslarda TTL, LRU kabi qo'shimcha mantiqni qo'shganda, tashqi kod (cache.Set(...) chaqiruvchi) hech narsani O'ZGARTIRMASDAN, ICHKI ishlashni murakkablashtira olishimizni ta'minlaydi.

Get — (qiymat, bool) juftligini qaytaradi ("Comma-ok Idiom" darsini eslang): bu "kalit topildimi yo'qmi" degan savolga aniq javob beradi, chunki bo'sh satr ("") HAM to'g'ri qiymat bo'lishi mumkin — shuning uchun faqat qiymatning o'zi YETARLI emas.

>_ Exercise

Cache'ga barcha kalitlarni ro'yxat sifatida olish imkonini qo'shing.

  • Keys() []string metodini yozing: c.data bo'ylab yurib, har bir kalitni natija slice'ga qo'shing
  • Uchta kalitni Set qiling, so'ng len(cache.Keys())ni chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Cache'ning asosiy qismi — oddiy xarita ustiga qurilgan Set/Get/Delete metodlari; bu inkapsulyatsiya keyingi darslarda qo'shiladigan murakkab mantiqni tashqi koddan yashirish imkonini beradi.

NEXT UP

TTL & Expiration