For tsikl — Go’da takrorlash uchun ishlatiladigan yagona sikl konstruksiyasi. Boshqa tillardagi while, do-while — Go’da alohida kalit so’z sifatida yo’q, ularning barchasi bitta forning turli shakllari orqali ifodalanadi.
for — Go’ning yagona sikl kalit so’zi. U to’rt xil shaklda yozilishi mumkin: to’liq uch qismli, faqat shart bilan (
whileo’rnida), shartsiz (cheksiz) varangebilan.
To’liq uch qismli shakl
Klassik C uslubidagi sikl: boshlang’ich qiymat, shart va har aylanishdan keyingi amal — barchasi bitta qatorda, nuqta-vergul bilan ajratilgan:
package main
import "fmt"
func main() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
}
}
1
2
3
4
5
i := 1 — bir marta bajariladi, i <= 5 — har aylanishdan oldin tekshiriladi, i++ — har aylanishdan keyin ishlaydi. Uchala qism ham, boshqa C-oilasidagi tillardan farqli, qavssiz yoziladi.
Faqat shart bilan — while o’rniga
Ikkinchi va uchinchi qismni tashlab, faqat shartni qoldirsak, for xuddi boshqa tillardagi while kabi ishlaydi:
package main
import "fmt"
func main() {
son := 1
for son <= 100 {
son *= 2
}
fmt.Println(son)
}
128
for son <= 100 — son 100’dan oshguncha ikkilantiraveradi. Go’da alohida while kalit so’zi yo’qligi sababi shu: forning o’zi bu vazifani to’liq bajaradi.
Shartsiz — cheksiz sikl
Hech qanday shartsiz yozilgan for cheksiz ishlaydi — undan chiqish uchun break shart:
package main
import "fmt"
func main() {
hisoblagich := 0
for {
hisoblagich++
if hisoblagich == 3 {
break
}
}
fmt.Println(hisoblagich)
}
3
for { — hech qanday to’xtash shartisiz boshlandi. hisoblagich == 3 bo’lganda if ichidagi break sikldan chiqardi. Bu shakl, masalan, tashqi hodisani (server so’rovi, foydalanuvchi kiritishi) kutadigan dasturlarda ishlatiladi.
for…range — to’plam bo’ylab yurish
Massiv, Slice, Map va satr bo’ylab yurish uchun range ishlatiladi — u har aylanishda indeks va qiymatni birga qaytaradi:
package main
import "fmt"
func main() {
for indeks, harf := range "salom" {
fmt.Println(indeks, harf, string(harf))
}
}
0 115 s
1 97 a
2 108 l
3 111 o
4 109 m
Satr bo’ylab range yurganda ikkinchi qiymat — rune (ma’lumot turlari darsida ko’rgan Unicode belgi kodi). harf — sonli kod (115 — 's'ning kodi), string(harf) esa uni o’qiladigan belgiga qaytaradi. Faqat indeks yoki faqat qiymat kerak bo’lsa, ishlatilmagan tomon _ bilan almashtiriladi: for _, harf := range "salom".