Go struct
Info
Struct — turli turdagi ma’lumotlarni bir obyekt sifatida guruhlash va saqlash imkonini beruvchi, foydalanuvchi tomonidan yaratiladigan ma’lumot tuzilmasi bo‘lib, u yangi tur (type) hisoblanadi.
Massivlar bir xil turdagi ma'lumotlar to'plamini bitta o'zgaruvchida saqlash uchun ishlatilsa,
struct turli xil ma'lumotlar turlarini bitta o'zgaruvchida saqlash uchun ishlatiladi.
struct an’anaviy obyektga yo‘naltirilgan dasturlash tillaridagi sinflarga o‘xshash, lekin meros olish (inheritance)
mavjud emas. structlar yordamida dasturni soddalashtirish va kodni o‘qilishi osonroq qilish mumkin.
Goda structni e'lon qilish uchun type va struct kalit so'zlaridan foydalaniladi:
Misol:
struct nima uchun kerak?
Agar dasturda bir-biri bilan bog‘liq bir nechta o‘zgaruvchilar bo‘lsa, ularni bitta tuzilma (struct) ichida saqlash
qulay bo‘ladi. Misol uchun, biror foydalanuvchi ma’lumotlarini saqlash uchun quyidagi struct ni yaratish mumkin:
package main
import "fmt"
type User struct {
Name string
Age int
Email string
}
func main() {
user := User{
Name: "Ali",
Age: 25,
Email: "[email protected]",
}
fmt.Println("Ism:", user.Name)
fmt.Println("Yosh:", user.Age)
fmt.Println("Email:", user.Email)
}
struct e'lon qilish boshqa usullari
E'lon qilish:
Ma'lumot qo'shish:
Tartibi bo'yicha ma'lumot qo'shish:
Bo'sh struct e'lon qilish va maydon qo'shish:
struct ichida struct
package main
import "fmt"
type Engine struct {
HorsePower int
Type string
}
type Car struct {
Brand string
Model string
Engine Engine
}
func main() {
car := Car{
Brand: "Mercedes",
Model: "S-Class",
Engine: Engine{
HorsePower: 500,
Type: "V8",
},
}
fmt.Println("Brend:", car.Brand)
fmt.Println("Model:", car.Model)
fmt.Println("Dvigatel quvvati:", car.Engine.HorsePower, "ot kuchi")
}
struct da default (nol) qiymatlar
package main
import "fmt"
type Product struct {
Name string
Price float64
Stock int
}
func main() {
var item Product
fmt.Println("Nomi:", item.Name) // ""
fmt.Println("Narxi:", item.Price) // 0
fmt.Println("Omborda:", item.Stock) // 0
}
Bo‘sh structdan foydalanish
package main
import "fmt"
func main() {
uniqueItems := make(map[string]struct{})
uniqueItems["apple"] = struct{}{}
uniqueItems["banana"] = struct{}{}
uniqueItems["apple"] = struct{}{} // Takroriy kiritish
fmt.Println("Mavjud mahsulotlar:")
for item := range uniqueItems {
fmt.Println(item)
}
}
Anonim struct dan foydalanish
Agar biz struct ni faqat bir marta ishlatmoqchi bo‘lsak, uning nomini bermasdan anonim struct yaratishimiz mumkin.
package main
import "fmt"
func main() {
person := struct {
Name string
Age int
}{
Name: "Rustam",
Age: 27,
}
fmt.Println("Ism:", person.Name, "| Yosh:", person.Age)
}
struct ning o'lchamini tekshirish
Agar struct qancha xotira egallashini bilmoqchi bo'lsak, unsafe.Sizeof() funksiyasidan foydalanish mumkin.
package main
import (
"fmt"
"unsafe"
)
type Example struct {
A int32
B bool
C float64
}
func main() {
fmt.Println("Struct hajmi (baytlarda):", unsafe.Sizeof(Example{}))
}
Goda struct juda kuchli va moslashuvchan tuzilma bo‘lib, u ma’lumotlarni aniq va tartibli saqlashga imkonini beradi.
Anonim maydonlar (anonymous field)
Agar struct ichida boshqa struct ni to‘g‘ridan-to‘g‘ri kiritib, meros olish (embedding) kerak bo‘lsa, anonim maydonlar ishlatiladi.
Natija:
TexnikXususiyatlar structi Avtomobil ichida anonim maydon sifatida ishlatilgani uchun Quvvat va Ogirlik ni
to‘g‘ridan-to‘g‘ri ishlata olamiz.