Go’da asosiy ma’lumot turlari
Ma’lumot turi qiymat nimani ifodalashi va u bilan qanday amallar bajarish mumkinligini belgilaydi. Masalan, int butun sonni, string matnni, bool esa mantiqiy holatni saqlaydi.
Tasavvur qiling, dastur foydalanuvchining ismi, yoshi va tizimga kirgan-kirmaganini saqlaydi. Har bir qiymatning vazifasi boshqa bo‘lgani uchun ularning turlari ham boshqa bo‘ladi:
| main.go | |
|---|---|
Bu misolda yosh bilan arifmetik amal bajarish, ism bilan matn sifatida ishlash, tizimgaKirdi orqali esa biror shartni tekshirish mumkin.
Ma’lumot turi nima uchun kerak?
Go statik turlangan til. Har bir o‘zgaruvchining turi kod kompilyatsiya qilinayotgan paytda ma’lum bo‘ladi. Bu kompilyatorga noto‘g‘ri amallarni dastur ishga tushishidan oldin topishga yordam beradi.
Masalan, butun son saqlaydigan o‘zgaruvchiga matn berib bo‘lmaydi:
Go boshlang‘ich qiymatga qarab turni o‘zi aniqlashi ham mumkin:
Tur nomi yozilmagan bo‘lsa ham, har bir o‘zgaruvchi aniq bir turga ega. Turni %T yordamida ko‘rish mumkin:
| main.go | |
|---|---|
Natija:
%v qiymatni odatiy ko‘rinishda, %T esa uning turini chiqaradi.
Butun sonlar
Butun sonlarda kasr qismi bo‘lmaydi: -12, 0, 25. Kundalik hisob-kitoblarda ko‘pincha int ishlatiladi:
int turi kompyuter arxitekturasiga qarab 32 yoki 64 bit bo‘ladi. Oddiy hisoblagich, yosh, mahsulot soni va indeks kabi qiymatlar uchun odatda int tanlanadi.
Aniq o‘lchamdagi ishorali sonlar
Ishorali (signed) turlar musbat, manfiy va nol qiymatlarni saqlaydi:
| Tur | O‘lchami | Qiymatlar oralig‘i |
|---|---|---|
int8 |
8 bit | -128 dan 127 gacha |
int16 |
16 bit | -32 768 dan 32 767 gacha |
int32 |
32 bit | -2 147 483 648 dan 2 147 483 647 gacha |
int64 |
64 bit | -9 223 372 036 854 775 808 dan 9 223 372 036 854 775 807 gacha |
Ishorasiz butun sonlar
Ishorasiz (unsigned) turlar manfiy qiymat saqlamaydi:
| Tur | O‘lchami | Qiymatlar oralig‘i |
|---|---|---|
uint8 |
8 bit | 0 dan 255 gacha |
uint16 |
16 bit | 0 dan 65 535 gacha |
uint32 |
32 bit | 0 dan 4 294 967 295 gacha |
uint64 |
64 bit | 0 dan 18 446 744 073 709 551 615 gacha |
uint ham kompyuter arxitekturasiga qarab 32 yoki 64 bit bo‘ladi. Qiymat hech qachon manfiy bo‘lmasligining o‘zi uint tanlash uchun har doim yetarli sabab emas. Umumiy hisob-kitoblarda int qulayroq, chunki Go turli son turlarini avtomatik aralashtirmaydi.
Aniq o‘lchamdagi turlar fayl formati, tarmoq protokoli yoki tashqi tizim bilan ma’lumot almashishda kerak bo‘ladi. Masalan, uint8 bitta baytdagi 0–255 oralig‘idagi qiymatni saqlaydi.
Warning
Tur sig‘dira oladigan oraliqdan chiqish overflow deb ataladi. Son uchun yetarli oraliqqa ega turni tanlang. Kompilyator o‘zgarmas qiymat sig‘masa xato beradi, ammo dastur bajarilishidagi ayrim hisoblarda qiymat o‘ralib ketishi mumkin.
Kasrli sonlar
Kasr qismi bor sonlar uchun float32 va float64 ishlatiladi:
| Tur | O‘lchami | Taxminiy aniqligi |
|---|---|---|
float32 |
32 bit | 6–7 ta o‘nlik raqam |
float64 |
64 bit | 15–16 ta o‘nlik raqam |
Go kasrli son literalini odatda float64 deb aniqlaydi. Shu sababli umumiy hisob-kitoblarda float64 ko‘proq ishlatiladi.
| main.go | |
|---|---|
Natija:
%.2f kasrli sonni verguldan keyin ikki xona bilan chiqaradi.
Info
float32 va float64 ayrim o‘nli kasrlarni ikkilik ko‘rinishda mutlaqo aniq saqlay olmaydi. Pul hisobida yaxlitlash xatosi muhim bo‘lsa, summani eng kichik birlikda butun son sifatida saqlash mumkin. Masalan, 1250 tiyin — 12.50 so‘m.
Mantiqiy tur: bool
bool faqat ikki qiymatdan birini saqlaydi: true yoki false. U “ha yoki yo‘q” ko‘rinishidagi holatlar uchun ishlatiladi:
Taqqoslash natijasi ham bool bo‘ladi:
| main.go | |
|---|---|
Natija:
Keyingi darslarda bool qiymatlarni if shartlarida ishlatamiz.
Matn turi: string
string matnni, ya’ni baytlar ketma-ketligini saqlaydi. Matn qo‘shtirnoq ichida yoziladi:
Ikki matnni + operatori bilan birlashtirish mumkin:
| main.go | |
|---|---|
Natija:
Go manba kodidagi matn UTF-8 kodlashida yoziladi. Shu sababli o‘zbekcha harflar va boshqa yozuv tizimlari bilan ishlash mumkin.
byte va rune
byte — uint8 turining boshqa nomi. U ko‘pincha xom ma’lumotning bitta baytini ifodalash uchun ishlatiladi.
rune — int32 turining boshqa nomi. U Unicode kod nuqtasini, odatda bitta belgini ifodalaydi. Rune literali bittalik tirnoq ichida yoziladi:
string uzunligini len() bilan olganda baytlar soni qaytadi. Unicode belgilar soni bundan farq qilishi mumkin:
| main.go | |
|---|---|
Natija:
G va o bittadan bayt, 😊 esa UTF-8 da to‘rt bayt egallaydi. []rune(matn) matnni Unicode belgilar ketma-ketligiga aylantiradi. Slice turi keyingi darslarda batafsil tushuntiriladi.
Kompleks sonlar
Go complex64 va complex128 turlariga ham ega. Kompleks son haqiqiy va mavhum qismlardan tuziladi:
Bu turlar ilmiy va muhandislik hisoblarida ishlatiladi. Oddiy dasturlarda kam uchraydi, shu sababli hozircha ularni tanib olish yetarli.
Turlarni o‘zgartirish
Go son turlarini avtomatik ravishda bir-biriga aylantirmaydi. Turlar boshqa bo‘lsa, aniq konvertatsiya yoziladi:
| main.go | |
|---|---|
float64(dona) dona qiymatini hisob uchun float64 turiga aylantiradi. Asl dona o‘zgaruvchisi int bo‘lib qoladi.
Kasrli sonni butun songa aylantirganda kasr qismi tashlab yuboriladi:
Bu yaxlitlash emas. 9.8 ham, 9.2 ham intga aylantirilganda 9 bo‘ladi.
Warning
Katta sonni kichik oraliqli turga aylantirish qiymatni buzishi mumkin. Masalan, qiymat := 300 dan keyin uint8(qiymat) natijasi 44 bo‘ladi. uint8(300) kabi sig‘maydigan o‘zgarmas qiymatni aylantirishga esa kompilyator ruxsat bermaydi. Konvertatsiyadan oldin qiymat yangi tur oralig‘iga sig‘ishini tekshirish kerak.
Sonni matnga yoki matnni songa aylantirish oddiy tur konvertatsiyasidan farq qiladi. Buning uchun odatda strconv paketi ishlatiladi; bu mavzuni ma’lumot kiritish va paketlar bilan ishlashda ko‘ramiz.
Nol qiymatlar
Boshlang‘ich qiymat berilmagan o‘zgaruvchi turiga mos nol qiymat oladi:
| Tur | Nol qiymat |
|---|---|
| butun va kasrli sonlar | 0 |
| kompleks sonlar | 0+0i |
bool |
false |
string |
"" |
| main.go | |
|---|---|
Natija:
Qaysi turni tanlash kerak?
Yangi boshlaganda quyidagi oddiy qoida yetarli:
- butun son uchun
int; - kasrli son uchun
float64; - matn uchun
string; - “ha yoki yo‘q” holati uchun
bool; - bitta Unicode belgisi uchun
rune; - protokol yoki fayl formati aniq o‘lcham talab qilsa,
int32,uint64kabi mos turni tanlang.
Massiv, slice, map, struct, pointer, funksiya, interface va channel ham Go’dagi turlardir. Ular bir nechta qiymatni saqlash yoki murakkab dastur tuzilishini ifodalash uchun ishlatiladi va keyingi darslarda alohida ko‘rib chiqiladi. nil esa alohida tur emas; ayrim turlarda qiymat mavjud emasligini bildiruvchi maxsus qiymat.
Xulosa
Go’da har bir qiymat aniq turga ega. int butun son, float64 kasrli son, bool mantiqiy holat, string matn, byte bayt va rune Unicode belgisini ifodalaydi. Go tur xavfsizligini saqlash uchun turli son turlarini avtomatik aralashtirmaydi; kerak bo‘lsa konvertatsiya ochiq yoziladi.
Keyingi darsda bu qiymatlar ustida hisoblash, taqqoslash va mantiqiy amallar bajarish uchun operatorlardan foydalanamiz.