Ma'lumot turlarini o'zgartirish
Tur o'zgartirish (Type casting) — bu bir ma'lumot turidagi (masalan, butun son, o'nlik kasr) qiymatni boshqa ma'lumot turiga o'tkazish jarayonidir.
Masalan:
// float turidagi o'zgaruvchi
var floatValue float32 = 9.8
// float ni int ga o'zgartiramiz
var intValue int = int(floatValue)
Bu yerda int(floatValue) ifodasi 9.8 kasr sonini butun son — 9 ga aylantiradi.
[!NOTE] Go dasturlash tilida tur o'zgartirish har doim dasturchi tomonidan qo'lda (oshkora) ko'rsatilishi shart. Bu oshkora tur o'zgartirish (explicit type casting) deb ataladi.
Go tili buning uchun int(), float32(), float64(), string() kabi o'rnatilgan funksiyalarni taqdim etadi.
Haqiqiy (kasrli) sonni butun songa aylantirganda, uning nuqtadan keyingi barcha kasr qismi tashlab yuboriladi (yaxlitlanmaydi, balki kesib tashlanadi):
package main
import "fmt"
func main() {
var floatValue float32 = 5.45
// float32 dan int ga o'zgartirish
var intValue int = int(floatValue)
fmt.Printf("Float qiymat: %g\n", floatValue)
fmt.Printf("Integer qiymat: %d\n", intValue)
}
Natija:
Float qiymat: 5.45
Integer qiymat: 5
Bu yerda int() funksiyasi 5.45 qiymatini 5 ga aylantirdi.
Butun sonni o'nlik kasr songa o'tkazish uchun float32() yoki float64() funksiyalaridan foydalanamiz:
package main
import "fmt"
func main() {
var intValue int = 2
// int dan float32 ga o'tkazamiz
var floatValue float32 = float32(intValue)
fmt.Printf("Integer qiymat: %d\n", intValue)
fmt.Printf("Float qiymat: %f\n", floatValue)
}
Natija:
Integer qiymat: 2
Float qiymat: 2.000000
float32(intValue) chaqiruvidan so'ng butun son 2 kasrli son 2.000000 ko'rinishiga o'tdi.
Ba'zi dasturlash tillarida (masalan, JavaScript yoki C/C++) bir turdagi qiymat ikkinchi turga avtomatik (yashirin) o'tishi mumkin.
Biroq Go tili yashirin tur o'zgartirishni qo'llab-quvvatlamaydi. Go — qat'iy tiplashtirilgan (strongly-typed) til bo'lib, xatoliklarni oldini olish maqsadida barcha tur o'zgartirishlar aniq ko'rsatilishini talab qiladi.
Masalan:
package main
import "fmt"
func main() {
// int turidagi o'zgaruvchiga float qiymat biriktirishga urinish
var number int = 4.34
fmt.Println(number)
}
Ushbu dastur kompilyatsiya vaqtidayoq xato beradi:
constant 4.34 truncated to integer
Go tilida turli xil ma'lumot turlaridagi (masalan, int va float32) o'zgaruvchilarni to'g'ridan-to'g'ri qo'shib bo'lmaydi:
package main
import "fmt"
func main() {
var number1 int = 20
var number2 float32 = 5.7
// Xato! number1 va number2 ning turlari har xil:
// var sum = number1 + number2
}
Bunday amallarni bajarish uchun avval ulardan birini ikkinchisining turiga o'tkazib olishimiz shart:
package main
import "fmt"
func main() {
var number1 int = 20
var number2 float32 = 5.7
var sum float32
// number1 (int) ni float32 ga o'tkazib, keyin qo'shamiz
sum = float32(number1) + number2
fmt.Printf("Yig'indi: %g\n", sum)
}
Natija:
Yig'indi: 25.7
[!TIP] Tur o'zgartirishda har doim ma'lumot yo'qotilishi mumkinligini inobatga oling.
floatdanintga o'tishda kasr qism butunlay yo'qoladi, katta sonlarni kichikroq o'lchamli turlarga (masalan,int64danint8ga) o'tkazishda esa to'lib toshish (overflow) ro'y berishi mumkin.