Massiv (Array) — belgilangan, o’zgarmas o’lchamdagi ma’lumot to’plami. Go’da massivning o’lchami uning turining bir qismi hisoblanadi — bu boshqa ko’p tillardan farq qiladigan, keyingi darsda ko’radigan Slice bilan solishtirganda alohida ahamiyat kasb etadigan xususiyat.
Array —
[N]Turshaklida e’lon qilinadigan, aniqNta elementdan iborat, o’lchami kompilyatsiya vaqtida qat’iy belgilangan to’plam.
Massiv yaratish va elementga murojaat
Massiv kvadrat qavs ichida o’lcham va tur ko’rsatib e’lon qilinadi:
package main
import "fmt"
func main() {
var sonlar [5]int
sonlar[0] = 10
sonlar[1] = 20
mevalar := [3]string{"olma", "anor", "uzum"}
fmt.Println(sonlar)
fmt.Println(mevalar[1])
}
[10 20 0 0 0]
anor
var sonlar [5]int — 5 ta intdan iborat massiv, boshlang’ich holatda barcha elementlar zero value (0) bilan to’lgan. mevalar := [3]string{...} — e’londa darhol qiymat berish (literal) shakli.
Massiv — qiymat turi (value type)
Go’ning muhim, ko’pincha kutilmagan xususiyati: massiv boshqa o’zgaruvchiga o’zlashtirilganda yoki funksiyaga uzatilganda to’liq nusxalanadi:
package main
import "fmt"
func main() {
original := [3]int{1, 2, 3}
nusxa := original
nusxa[0] = 100
fmt.Println(original)
fmt.Println(nusxa)
}
[1 2 3]
[100 2 3]
nusxa := original massivning mustaqil nusxasini yaratdi — nusxani o’zgartirish originalga hech qanday ta’sir qilmadi. Bu C++’dagi statik massivga o’xshaydi, lekin Java yoki Python’dagi ro’yxatlardan tubdan farq qiladi (ular reference orqali ishlaydi).
Uzunlikni aniqlash va sikl bilan yurish
len() funksiyasi massiv uzunligini qaytaradi, range esa uni indeks va qiymat bilan birga aylanib chiqadi:
package main
import "fmt"
func main() {
baholar := [4]int{85, 92, 78, 95}
fmt.Println(len(baholar))
for indeks, baho := range baholar {
fmt.Printf("%d-o'rin: %d\n", indeks, baho)
}
}
4
0-o'rin: 85
1-o'rin: 92
2-o'rin: 78
3-o'rin: 95
range baholar har bir aylanishda ikkita qiymat — joriy indeks va o’sha indeksdagi element — qaytaradi. for...range — Go’da massiv (va keyingi darsdagi Slice) bo’ylab yurishning standart usuli.
O’lcham — turning qismi
Chunki o’lcham turga kiradi, [3]int va [5]int butunlay boshqa ikki tur hisoblanadi — ular orasida to’g’ridan-to’g’ri o’zlashtirish mumkin emas:
package main
import "fmt"
func main() {
var uchta [3]int
var beshta [5]int
fmt.Println(uchta, beshta)
uchta = beshta
}
# command-line-arguments
./main.go:10:10: cannot use beshta (variable of type [5]int) as [3]int value in assignment
Bu qat’iylik amaliyotda massivni kamdan-kam, faqat o’lchami oldindan aniq ma’lum bo’lgan holatlarda foydali qiladi. Aynan shu sabab amaliyotda deyarli har doim keyingi darsda ko’radigan Slice ishlatiladi.