Lewati ke konten

3. If, For & Switch

if nilai >= 85 {
fmt.Println("Sangat baik")
} else if nilai >= 55 {
fmt.Println("Lulus")
} else {
fmt.Println("Belum lulus")
}

Tidak perlu kurung di sekitar kondisi, tapi kurung kurawal wajib — bahkan untuk satu baris.

if juga bisa diawali pernyataan singkat. Variabelnya hanya hidup di dalam blok if:

if sisa := stok - terjual; sisa < 5 {
fmt.Println("Stok menipis:", sisa)
}

Operator perbandingan: == != < <= > >=. Operator logika: && (dan), || (atau), ! (bukan).

Go tidak punya while — semua perulangan memakai for:

// gaya klasik
for i := 1; i <= 3; i++ {
fmt.Println(i)
}
// gaya "while"
n := 3
for n > 0 {
n--
}
// selamanya — hentikan dengan break
for {
if selesai() {
break
}
}

range mengambil indeks dan isi dari slice, string, atau map:

daftar := []int{92, 78, 55}
for i, n := range daftar {
fmt.Println(i, n) // 0 92, 1 78, 2 55
}

Tidak butuh indeksnya? Ganti dengan _ (blank identifier): for _, n := range daftar. Ingat: variabel yang tidak dipakai adalah error.

continue melompat ke putaran berikutnya, break keluar dari perulangan.

switch lebih rapi daripada if-else yang panjang:

switch hari {
case "Sabtu", "Minggu":
fmt.Println("Libur")
default:
fmt.Println("Kerja")
}

Tanpa ekspresi setelah switch, setiap case berisi kondisi — pengganti if-else if:

switch {
case suhu > 80:
fmt.Println("Bahaya!")
case suhu > 60:
fmt.Println("Panas")
default:
fmt.Println("Normal")
}

go vet mencari kesalahan yang lolos compile, misalnya format Printf yang jumlahnya tidak cocok dengan argumennya:

fmt.Printf("%d dari %d lulus\n", lulus)
$ go vet
# nilai
./main.go:19:2: fmt.Printf format %d reads arg #2, but call has 1 arg

Tidak ada output dari go vet artinya tidak ditemukan masalah.

Lab: Rapor: if, for & switch
Misi 0/5
  1. Masuk ke nilai lalu jalankan programnya. Semua predikat masih ?.
    Petunjukcd nilai && go run .
  2. Lengkapi predikat dengan if / else if: ≥85 A, ≥70 B, ≥55 C, selain itu D.
    Petunjukif nilai >= 85 { return "A" } else if nilai >= 70 { ... } — lalu go run .
  3. Hitung yang lulus (nilai ≥ 55) di dalam loop, lalu cetak Lulus: 4 dari 5.
    Petunjuklulus := 0 sebelum for, if n >= 55 { lulus++ } di dalamnya, lalu fmt.Println("Lulus:", lulus, "dari", len(daftar))
  4. Tulis ulang predikat memakai switch tanpa ekspresi. Outputnya harus tetap sama.
    Petunjukswitch { case nilai >= 85: return "A" ... default: return "D" }
  5. Periksa kesalahan umum dengan go vet.
    Petunjukgo vet