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.
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.
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
$ go run main.go
Kodingizni ishga tushiring