Project: Music Catalog (Storage)
Loyiha: Musiqa katalogi (Saqlash)
type Phonebook map[string]string
func NewPhonebook() Phonebook {
return make(Phonebook)
}
func (pb Phonebook) Add(name, number string) {
pb[name] = number
}
func (pb Phonebook) Lookup(name string) (string, bool) {
num, ok := pb[name]
return num, ok
}Map ustidan tur aniqlash sizga metod biriktirish imkonini beradi. Phonebook shunchaki map[string]string, lekin endi unda Add va Lookup bor.
Maplar ma'lumot turlari (reference types) bo'lgani uchun, metodlar nusxani emas, aslini oladi. Pointer receiver kerak emas. pb[name] = number chaqiruvchining mapini to'g'ridan-to'g'ri o'zgartiradi.
Lookupdagi comma-ok andazasi "kalit topilmadi"ni "kalit nol qiymat bilan mavjud"dan ajratadi. Buni Exists or Not darsida ko'rgansiz. Xuddi shu andaza, endi metodlari bor nomlangan tur ustida.
>_ Exercise
Song va Album turlaringiz tayyor. Endi saqlash qatlamini quring.
Libraryni nomlangan map turi sifatida aniqlang: map[string]Album (albom sarlavhasi bo'yicha kalitlangan).
Quyidagi metodlarni yozing:
- •1.
NewLibrary() Library— ishga tushirilgan bo'sh kutubxonani qaytaradi - •2.
(lib Library) AddAlbum(a Album)— albomni uning Title'i bo'yicha kalitlab qo'shadi - •3.
(lib Library) FindAlbum(title string) (Album, bool)— albomni va uning mavjudligini qaytaradi - •4.
(lib Library) RemoveAlbum(title string) bool— albomni olib tashlaydi, u mavjud bo'lsa true qaytaradi - •5.
(lib Library) AllSongs() []Song— kutubxonadagi har bir albomning har bir qo'shig'ini qaytaradi
Misollar:
- •
lib.AddAlbum(album)unialbum.Titleostida saqlaydi - •
lib.FindAlbum("Abbey Road")(Album{...}, true)qaytaradi - •
lib.FindAlbum("Nonexistent")(Album{}, false)qaytaradi - •Har biri 3 qo'shiqli 2 albomga ega kutubxonada
len(lib.AllSongs()) == 6
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Nomlangan map turlari metodlarga ega bo'la oladi. Maplar ma'lumot turlari, shuning uchun pointer receiver kerak emas.
NEXT UP
Project: Music Catalog (Search)
$ go run main.go
Kodingizni ishga tushiring