Pelajaran modul (2/5)
untuk: satu-satunya loop
Go memiliki konstruksi loop tunggal: for. Tidak while, tidak
do-while, no foreach (yang ada di pelajaran berikutnya dengan
range). Satu kata kunci mencakup semua kasus berkat tiga bentuk.
Tiga bentuk for
Bentuk tiga klausa klasik
Identik dengan C/Java:
for i := 0; i < 5; i++ {
fmt.Println(i)
}i memiliki cakupan terbatas pada for. Ketiga klausa tersebut bersifat opsional (Anda bisa
hilangkan salah satu dari mereka) tetapi ; tetap ada jika Anda menghilangkan yang perantara.
Bentuk "sementara": syarat saja
Di Go, while hanyalah sebuah for dengan satu ekspresi bool:
i := 0
for i < 5 {
fmt.Println(i)
i++
}Bentuk tak terbatas
Tanpa klausa, loop tidak akan pernah berakhir (kecuali break/return):
for {
if exitCondition() {
break
}
doWork()
}Ini adalah pola untuk loop penanganan peristiwa, server, kebijakan percobaan ulang.
break, continue dan label
break keluar dari loop terdalam, continue melompat ke iterasi berikutnya:
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue // salta i pari
}
if i > 7 {
break // ferma il ciclo
}
fmt.Println(i) // 1 3 5 7
}Untuk keluar dari loop bersarang ada label (jarang tetapi berguna):
Esterno:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i*j == 4 {
break Esterno // esce da entrambi
}
}
}Tidak ada operator , seperti di C
Di Go Anda tidak dapat menulis for i, j := 0, 10; i < j; i, j = i+1, j-1:
ekspresi posting tidak menerima banyak tugas. Gunakan Go
sintaks beberapa tugas:
for i, j := 0, 10; i < j; i, j = i+1, j-1 {
fmt.Println(i, j)
}Ini malah berhasil karena i, j = i+1, j-1 adalah single
banyak tugas.
Cobalah
Cetak angka dari 0 hingga 4 inklusif dengan tiga klausa klasik untuk.
Tunjukkan petunjuk
`untuk init; kond; post { ... }` — di sini init adalah `i := 0`.
Solusi tersedia setelah 3 upaya
Jumlahkan semua bilangan dari 1 sampai 10 inklusif dengan menggunakan bentuk 'sementara' dari for.
Tunjukkan petunjuk
Bentuk 'sementara': `untuk <kondisi> { ... }`.
Solusi tersedia setelah 3 upaya
Bentuk manakah yang mewakili loop tak terbatas di Go?
// (a) for i := 0; i < 10; i++ { ... }
// (b) for cond { ... }
// (c) for { ... }Rekap
- Kata kunci tunggal
fordengan tiga bentuk: klasik, sementara, tak terbatas. break/continueopsional dengan label untuk loop bersarang.- Label
Name:sebelumfor, gunakan secukupnya. - Tidak ada
,sebagai operator: gunakan tugas gandai, j = ..., ....