Darsliklar Go Lang Massiv

Go Lang Go Lang Massiv

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]Tur shaklida e’lon qilinadigan, aniq N ta 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.