Struktūrinis programavimas
Pamoka 7 / 11 Masyvai ir įrašų slice ~40 min
1 / 4 📖 Teorija

Masyvas ir slice — lentyna, kuri auga

Vienas įrašas — gerai, bet kur dėti visą biblioteką? Reikia lentynos.

Masyvas — fiksuoto dydžio lentyna: var shelf [3]Item — lygiai 3 vietos, amžinai. Dydis yra tipo dalis ([3]Item ir [4]Item — skirtingi tipai!). Egzistuoja ir daugiamačiai: var board [3][3]string — 3×3 lenta (kryžiukai-nuliukai). Praktikoje gryną masyvą naudosi retai.

Slice — lentyna, kuri auga: []Item (be skaičiaus). Tai standartinis Go sąrašo tipas:

var items []Item                 // empty shelf (zero value: nil, safe to use)

items = append(items, Item{Title: "Dune", Pages: 412})
items = append(items, Item{Title: "Hobbit", Pages: 310})

fmt.Println(len(items))          // 2
fmt.Println(items[0].Title)      // Dune — numbering starts at 0!

Trys taisyklės:

  • append grąžina naują slice — visada rašyk items = append(items, x) (vien append(items, x) be priskyrimo rezultatą išmeta).
  • len(items) — kiek įrašų dabar.
  • Indeksai nuo 0 iki len-1; items[5] iš 2 įrašų — programa lūžta (panika). Ribas tikrinsim patys.

Patarimas. Nulinė slice reikšmė yra nil — bet len(nil slice) yra 0 ir append į ją veikia. 2 pamokos saugumo taisyklė galioja ir čia: nedeklaruota lentyna — tiesiog tuščia lentyna.