Project: Music Catalog (Types)
Loyiha: Musiqa katalogi (Turlar)
type Team struct {
Name string
Members []string
}
func (t *Team) Add(name string) {
t.Members = append(t.Members, name)
}
func (t Team) Size() int {
return len(t.Members)
}Structlar maydon sifatida istalgan turni, jumladan slicelarni ham saqlashi mumkin. A'zolari bilan Team, qo'shiqlari bilan Album, mahsulotlari bilan Order.
Metod slice maydonida append ishlatganda, unga pointer receiver kerak bo'ladi. append yangi tub massiv ajratishi mumkin, shuning uchun structning slice header'i joyida yangilanishi kerak. Value receiver nusxani yangilaydi va o'zgarish yo'qoladi.
Faqat o'qiydigan metodlar value receiver ishlatadi. O'zgartiradigan metodlar pointer receiver ishlatadi.
Bu uchta mashqning birinchisi. Siz structlar, slicelar, maplar, metodlar va filtrlashni bitta tizimga birlashtiradigan musiqa katalogini yaratyapsiz.
>_ Exercise
Musiqa katalogi uchun tur fundamentini yarating.
Title string, Artist string, Duration int (soniyalarda), Genre string maydonlariga ega Song struct'ini aniqlang.
Title string, Artist string, Year int, Songs []Song maydonlariga ega Album struct'ini aniqlang.
Quyidagi funksiyalarni yozing:
- •1.
NewSong(title, artist string, duration int, genre string) Song - •2.
NewAlbum(title, artist string, year int) Album— bo'sh Songs slice bilan boshlanadi - •3.
(a *Album) AddSong(s Song)— qo'shiq qo'shadi (pointer receiver, chunki append slicani o'zgartiradi) - •4.
(a Album) TotalDuration() int— barcha qo'shiqlar davomiyligining yig'indisini qaytaradi
Misollar:
- •
NewSong("Come Together", "The Beatles", 259, "rock")shu maydonlarga ega Song qaytaradi - •
a.AddSong(song)dan keyin,len(a.Songs)1 taga oshadi - •Davomiyligi 259, 182, 185 bo'lgan qo'shiqli albom
TotalDuration()626 ga teng
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Structlar boshqa maydon kabi slicelarni ham saqlaydi. Append qiladigan metodlar uchun pointer receiver'dan foydalaning.
NEXT UP
Project: Music Catalog (Storage)
$ go run main.go
Kodingizni ishga tushiring