strconv paketi
strconv — Go standart kutubxonasidagi paket bo'lib, asosiy ma'lumot turlarini (int, float64, bool) satr (string) ko'rinishiga va aksincha, satrni bu turlarga aylantirish uchun ishlatiladi.
Masalan, foydalanuvchidan matn ko'rinishida kiritilgan sonni ("25") haqiqiy int turiga aylantirish yoki, aksincha, sonni ekranga matn sifatida chiqarish uchun ushbu paket zarur bo'ladi.
Paketdan foydalanish uchun uni dasturga import qilish kerak:
import "strconv"
Atoi()Atoi() (ASCII to Integer) funksiyasi satrni butun songa (int) aylantiradi:
package main
import (
"fmt"
"strconv"
)
func main() {
// satrni int turiga aylantiramiz
num, err := strconv.Atoi("108")
fmt.Println(num)
fmt.Println(err)
}
Natija:
108
<nil>
Atoi() ikkita qiymat qaytaradi: aylantirilgan son va xatolik (error). Agar aylantirish muvaffaqiyatli bo'lsa, err qiymati nil bo'ladi.
package main
import (
"fmt"
"strconv"
)
func main() {
num, err := strconv.Atoi("abc")
fmt.Println("Son:", num)
fmt.Println("Xatolik:", err)
}
Natija:
Son: 0
Xatolik: strconv.Atoi: parsing "abc": invalid syntax
[!IMPORTANT]
strconvbilan ishlagandaerrqiymatini albatta tekshiring! Agar aylantirish muvaffaqiyatsiz bo'lsa, qaytgan son har doim0bo'ladi va buni sukut bo'yicha e'tiborsiz qoldirish dasturda yashirin xatoliklarga olib kelishi mumkin.
Itoa()Itoa() (Integer to ASCII) funksiyasi Atoi()ning teskarisi — butun sonni satrga aylantiradi:
package main
import (
"fmt"
"strconv"
)
func main() {
// int turini string turiga aylantiramiz
text := strconv.Itoa(255)
fmt.Println(text)
fmt.Printf("%T\n", text) // turi string ekanini tekshiramiz
}
Natija:
255
string
[!NOTE] Sonni satrga
fmt.Sprintf("%d", son)orqali ham aylantirish mumkin, lekinstrconv.Itoa()bunga maxsus mo'ljallangan, tezroq va o'qish uchun qulayroq usuldir.
ParseInt() va FormatInt()Atoi()/Itoa() faqat 10-lik (decimal) sonlar bilan ishlaydi. Agar boshqa sanoq sistemasi (masalan, 16-lik — hexadecimal) bilan ishlash kerak bo'lsa, ParseInt() va FormatInt() funksiyalaridan foydalaniladi:
package main
import (
"fmt"
"strconv"
)
func main() {
// "FF" ni 16-lik sanoq sistemasidan int64 ga aylantiramiz
// parametrlar: satr, asos (base), bit hajmi (bitSize)
num, _ := strconv.ParseInt("FF", 16, 64)
fmt.Println(num) // 255
// 255 ni 16-lik sanoq sistemasidagi satrga aylantiramiz
text := strconv.FormatInt(255, 16)
fmt.Println(text) // ff
}
Natija:
255
ff
Bu yerda 16 — sanoq sistemasining asosi (2, 8, 10, 16 va h.k.), 64 esa natija qaysi bit hajmidagi (int64) songa sig'ishi kerakligini bildiradi.
ParseFloat()Satrni kasr songa (float64) aylantirish uchun ParseFloat() ishlatiladi:
package main
import (
"fmt"
"strconv"
)
func main() {
// "64" — natijaning bit hajmi (float64 uchun)
price, err := strconv.ParseFloat("3.14", 64)
fmt.Println(price)
fmt.Println(err)
}
Natija:
3.14
<nil>
Kasr sonni orqaga satrga aylantirish uchun strconv.FormatFloat() yoki oddiygina strconv.Itoa()ga o'xshab fmt.Sprintf("%.2f", price) dan foydalanish mumkin.
ParseBool() va FormatBool()"true", "false" kabi satrlarni haqiqiy bool turiga aylantirish uchun ParseBool() ishlatiladi:
package main
import (
"fmt"
"strconv"
)
func main() {
// satrni bool turiga aylantiramiz
isActive, _ := strconv.ParseBool("true")
fmt.Println(isActive)
// bool turini satrga aylantiramiz
text := strconv.FormatBool(false)
fmt.Println(text)
}
Natija:
true
false
[!NOTE]
ParseBool()"1","t","T","TRUE","true","True"kabi bir nechta yozilish variantini hamtruedeb qabul qiladi (xuddi shunga mos ravishdafalseuchun ham).
Quote()Quote() funksiyasi satrni Go kod ko'rinishidagi qo'shtirnoqli satrga aylantiradi — bunda maxsus belgilar (masalan, tab, yangi qator) ham to'g'ri "escape" qilinadi:
package main
import (
"fmt"
"strconv"
)
func main() {
message := "Salom\tDunyo"
// maxsus belgilarni ham ko'rsatib qo'shtirnoqqa oladi
quoted := strconv.Quote(message)
fmt.Println(quoted)
// aksincha: qo'shtirnoqli satrni asl holiga qaytaradi
original, _ := strconv.Unquote(quoted)
fmt.Println(original)
}
Natija:
"Salom\tDunyo"
Salom Dunyo
Bu funksiya, masalan, log yozuvlarida yoki disk raskadrovka (debugging) chiqishlarida satr ichidagi ko'rinmas belgilarni (tab, yangi qator) aniq ko'rsatish uchun juda qulay.
strconv.NumErrorstrconv funksiyalari muvaffaqiyatsiz bo'lganda oddiy error emas, balki *strconv.NumError turidagi maxsus xatolikni qaytaradi. Uni turga aylantirib (type assertion), xatolik haqida batafsil ma'lumot olish mumkin:
package main
import (
"fmt"
"strconv"
)
func main() {
_, err := strconv.Atoi("12a")
// xatolikni *strconv.NumError turiga aylantiramiz
if numErr, ok := err.(*strconv.NumError); ok {
fmt.Println("Qaysi funksiyada:", numErr.Func)
fmt.Println("Qanday qiymatda:", numErr.Num)
fmt.Println("Sabab:", numErr.Err)
}
}
Natija:
Qaysi funksiyada: Atoi
Qanday qiymatda: 12a
Sabab: invalid syntax
Bu usul, ayniqsa, foydalanuvchi kiritgan noto'g'ri ma'lumot haqida aniq va tushunarli xatolik xabari ko'rsatishda foydali.
| Vazifa | Funksiya |
|---|---|
Satrdan int ga (10-lik) | strconv.Atoi(s) |
int dan satrga (10-lik) | strconv.Itoa(n) |
Satrdan int64 ga (istalgan asosda) | strconv.ParseInt(s, asos, bitHajmi) |
int64 dan satrga (istalgan asosda) | strconv.FormatInt(n, asos) |
Satrdan float64 ga | strconv.ParseFloat(s, 64) |
Satrdan bool ga | strconv.ParseBool(s) |
bool dan satrga | strconv.FormatBool(b) |
| Satrni "escape" qilib qo'shtirnoqqa olish | strconv.Quote(s) |