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. struct
lar yordamida dasturni soddalashtirish va kodni o‘qilishi osonroq qilish mumkin.
Go
da struct
ni 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{}))
}
Go
da 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.