Format Like a Pro
Hozirgacha qiymatlarni bo'sh joy bilan ajratib chop etish uchun fmt.Println dan foydalanib keldingiz. Lekin narsalar qanday ko'rinishini nazorat qilmoqchi bo'lsangiz-chi? Go'da uchta formatlash funksiyasi bor:
| FUNKSIYA | NIMA QILADI |
|---|---|
fmt.Printf | Formatlangan stringni ekranga chop etadi |
fmt.Sprintf | Formatlangan stringni qaytaradi (chop etmaydi) |
fmt.Fprintf | Formatlangan stringni faylga yoki ulanishga yozadi |
Ularning barchasi bir xil format fe'llaridan (verb) foydalanadi. Farqi — natija qayerga borishida.
fmt.Printf("Server %s: %d requests\n", "api-1", 1523)
// chop etadi: Server api-1: 1523 requests
msg := fmt.Sprintf("Server %s: %d requests", "api-1", 1523)
// qaytaradi: "Server api-1: 1523 requests"E'tibor bering, Printf yangi qator uchun oxirida \n talab qiladi. Println buni avtomatik qo'shadi, lekin format funksiyalari qo'shmaydi.
Format fe'llari (verbs)
| FE'L | TUR | MISOL |
|---|---|---|
%s | string | fmt.Sprintf("hi %s", "Go") → "hi Go" |
%d | butun son | fmt.Sprintf("%d errors", 3) → "3 errors" |
%.2f | float (2 kasr xona) | fmt.Sprintf("$%.2f", 9.9) → "$9.90" |
%v | istalgan qiymat | fmt.Sprintf("%v", true) → "true" |
%.2f dagi nuqtadan keyingi son kasr xonalar sonini boshqaradi. %.1f bittasini, %.3f esa uchtasini ko'rsatadi.
Sprintf — eng ko'p ishlatadigan funksiyangiz. Funksiya formatlangan matnni qaytarishi kerak bo'lganda, buni shunday qilasiz.
>_ Exercise
formatDownload ni to'ldiring, u formatlangan yuklab olish holati qatorini qaytarsin.
Format quyidagicha: "backup.zip (3.50 MB) downloaded in 12s"
- •Hajm doim aynan 2 ta kasr xona bilan ko'rsatiladi, shuning uchun
0.8—0.80,125.0esa125.00bo'lib ko'rinadi - •Son bilan
MBorasiga bitta bo'sh joy qo'ying:3.50 MB,3.50MBemas - •Stringni yasash uchun
fmt.Sprintfdan foydalaning
Misollar:
- •
formatDownload("backup.zip", 3.5, 12)"backup.zip (3.50 MB) downloaded in 12s"qaytaradi - •
formatDownload("photo.png", 0.8, 1)"photo.png (0.80 MB) downloaded in 1s"qaytaradi - •
formatDownload("video.mp4", 125.0, 45)"video.mp4 (125.00 MB) downloaded in 45s"qaytaradi
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Printf formatlangan matnni chop etadi, Sprintf esa uni string sifatida qaytaradi. Stringlar uchun %s, butun sonlar uchun %d, 2 kasr xonali floatlar uchun %.2f dan foydalaning.
$ go run main.go
Kodingizni ishga tushiring