19 / 68

struct

Tuzilmalar

Go tilida struct (tuzilma) bir nechta turli xil ma'lumot turlariga ega bo'lgan o'zgaruvchilarni bitta umumiy nom ostida guruhlash uchun ishlatiladi.

Masalan, biror insonning ismi (string) va yoshini (int) saqlamoqchi bo'lsak, har bir inson uchun alohida o'zgaruvchilar ochib chiqish noqulay. Buning o'rniga bitta Person nomli struktura yaratib, barcha insonlar ma'lumotlarini shu tuzilma asosida saqlash mumkin.


1. Goda Struktura e'lon qilish

Struktura quyidagi sintaksis yordamida e'lon qilinadi:

example.go
type TuzilmaNomi struct {
    // maydonlar (fields)
}

Bu yerda:

  • type — yangi ma'lumot turini yaratish kalit so'zi.
  • TuzilmaNomi — strukturamiz nomi (odatda bosh harf bilan yoziladi).
  • struct — tuzilma ekanligini bildiruvchi kalit so'z.

Misol:

example.go
type Person struct {
    name string
    age  int
}

Bu yerda biz ikkita maydonga (name va age) ega bo'lgan Person nomli strukturani yaratdik.


2. Strukturadan nusxa olish (Struct Instances)

Struktura ta'rifi shunchaki bir qolip (chizma) hisoblanadi. Undan foydalanish uchun uning nusxasi (instance) ni yaratish kerak:

example.go
// 1-usul: var orqali e'lon qilib, keyin qiymat berish
var person1 Person
person1 = Person{"John", 25}

// 2-usul: Qisqa e'lon qilish va birdan qiymat berish
person2 := Person{"John", 25}

// 3-usul: Maydon nomlarini ko'rsatib qiymat berish (tavsiya etiladi)
person3 := Person{
    name: "Sara",
    age:  29,
}

To'liq kod misoli:

example.go
package main

import "fmt"

func main() {
    type Person struct {
        name string
        age  int
    }

    // Nusxa yaratish va qiymat tayinlash
    person1 := Person{"John", 25}
    fmt.Println(person1)

    // Maydon nomlari bilan qiymat berish
    var person2 Person
    person2 = Person{
        name: "Sara",
        age:  29,
    }
    fmt.Println(person2)
}

Natija:

kod
{John 25}
{Sara 29}

3. Struktura maydonlariga murojaat qilish

Strukturadagi alohida maydonlarga murojaat qilish va ularning qiymatini olish yoki o'zgartirish uchun nuqta (.) belgisidan foydalaniladi:

example.go
package main

import "fmt"

func main() {
    type Rectangle struct {
        length  int
        breadth int
    }

    // rect nusxasini yaratamiz
    rect := Rectangle{22, 12}

    // Nuqta (.) orqali maydonlarga murojaat qilamiz
    fmt.Println("Uzunligi:", rect.length)
    fmt.Println("Kengligi:", rect.breadth)

    area := rect.length * rect.breadth
    fmt.Println("Yuzasi:", area)
}

Natija:

kod
Uzunligi: 22
Kengligi: 12
Yuzasi: 264

4. Strukturada maydon sifatida funksiya ishlatish

Go dasturlash tili struktura ichida funksiyani ham alohida maydon (field) sifatida saqlashga ruxsat beradi:

example.go
package main

import "fmt"

// Funksiya turini e'lon qilamiz
type RectangleCalculator func(int, int) int

type rectanglePara struct {
    length  int
    breadth int
    color   string
    // Funksiya strukturaning maydoni sifatida
    calc    RectangleCalculator
}

func main() {
    result := rectanglePara{
        length:  10,
        breadth: 20,
        color:   "Qizil",
        calc: func(length int, breadth int) int {
            return length * breadth
        },
    }

    fmt.Println("To'rtburchak rangi:", result.color)
    fmt.Println("To'rtburchak yuzasi:", result.calc(result.length, result.breadth))
}

Natija:

kod
To'rtburchak rangi: Qizil
To'rtburchak yuzasi: 200