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.
Struktura quyidagi sintaksis yordamida e'lon qilinadi:
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.type Person struct {
name string
age int
}
Bu yerda biz ikkita maydonga (name va age) ega bo'lgan Person nomli strukturani yaratdik.
Struktura ta'rifi shunchaki bir qolip (chizma) hisoblanadi. Undan foydalanish uchun uning nusxasi (instance) ni yaratish kerak:
// 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,
}
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:
{John 25}
{Sara 29}
Strukturadagi alohida maydonlarga murojaat qilish va ularning qiymatini olish yoki o'zgartirish uchun nuqta (.) belgisidan foydalaniladi:
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:
Uzunligi: 22
Kengligi: 12
Yuzasi: 264
Go dasturlash tili struktura ichida funksiyani ham alohida maydon (field) sifatida saqlashga ruxsat beradi:
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:
To'rtburchak rangi: Qizil
To'rtburchak yuzasi: 200