Siklni to'xtatish va davom ettirish
Go dasturlash tilida ba'zan sikl to'liq bajarilmasdan turib uni to'xtatish yoki ma'lum bir iteratsiyani tashlab o'tish talab qilinadi. Buning uchun break va continue operatorlaridan foydalaniladi.
Ushbu operatorlar deyarli har doim shartli ifodalar (if...else) bilan birgalikda ishlatiladi.
break operatori bajarilganda, sikl darhol o'z ishini yakunlaydi va dastur boshqaruvi sikldan keyingi qatorga o'tadi.
for boshlang'ich_qiymat; shart; o'zgarish {
if shart {
break
}
// sikl tanasi
}
Bu yerda sikl sharti bajarilishidan qat'i nazar, break operatori siklni muddatidan oldin to'xtatadi.

Quyidagi misolda 1 dan 5 gacha bo'lgan sonlarni chiqaruvchi for siklidan foydalanamiz, lekin i == 3 bo'lganda break operatorini chaqiramiz:
package main
import "fmt"
func main() {
for i := 1; i <= 5; i++ {
// i ning qiymati 3 ga teng bo'lganda siklni to'xtatamiz
if i == 3 {
break
}
fmt.Println(i)
}
}
Natija:
1
2
Tushuntirish:
i = 1 va i = 2 bo'lganda i == 3 sharti yolg'on (false), shuning uchun 1 va 2 ekranga chop etiladi.i = 3 bo'lganda if i == 3 sharti rost (true) bo'ladi va break operatori ishga tushadi.break butun for siklini to'xtatadi, natijada 3, 4 va 5 chop etilmaydi.Ichma-ich (nested) sikllar mavjud bo'lganda, break operatori faqat o'zi joylashgan ichki siklni to'xtatadi, tashqi sikl esa o'z ishini davom ettiradi:
package main
import "fmt"
func main() {
// Tashqi for sikli
for i := 1; i <= 3; i++ {
// Ichki for sikli
for j := 1; j <= 3; j++ {
// Faqat ichki for siklini to'xtatadi
if i == 2 {
break
}
fmt.Printf("i = %d, j = %d\n", i, j)
}
}
}
Natija:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3
Bu yerda i == 2 bo'lganda ichki sikl to'xtatilgani sababli i = 2 bo'lgan qatorlar ekranga chiqmaydi, ammo i = 3 uchun tashqi sikl yana ishlaydi.
continue operatori butun siklni to'xtatmaydi, balki siklning joriy iteratsiyasidagi (aylanishidagi) qolgan kodlarni tashlab o'tib, dastur boshqaruvini darhol keyingi iteratsiyaga uzatadi.
for boshlang'ich_qiymat; shart; o'zgarish {
if shart {
continue
}
// davom etuvchi sikl tanasi
}

Keling, 1 dan 5 gacha sanaydigan siklda i == 3 bo'lganda continue operatorini qo'llaymiz:
package main
import "fmt"
func main() {
for i := 1; i <= 5; i++ {
// i teng 3 bo'lganda ushbu qadamni tashlab o'tamiz
if i == 3 {
continue
}
fmt.Println(i)
}
}
Natija:
1
2
4
5
Tushuntirish:
i = 3 bo'lgan paytda if i == 3 sharti bajariladi va continue chaqiriladi.fmt.Println(i) bajarilmay qolib, sikl darhol i++ ga o'tadi (i = 4).3 soni ko'rinmaydi.Ichma-ich sikllarda continue operatori chaqirilganda, u faqat o'zi tegishli bo'lgan ichki siklning joriy iteratsiyasini tashlab o'tadi:
package main
import "fmt"
func main() {
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
// Faqat ichki siklning joriy qadamini tashlab o'tadi
if j == 2 {
continue
}
fmt.Printf("i = %d, j = %d\n", i, j)
}
}
}
Natija:
i = 1, j = 1
i = 1, j = 3
i = 2, j = 1
i = 2, j = 3
i = 3, j = 1
i = 3, j = 3
E'tibor berganingizdek, j == 2 bo'lgan barcha holatlarda qadam tashlab o'tildi va j = 2 qiymati ekranga chiqmadi.