Kontrol Kondisi Go
Di Go total ada tiga jenis pernyataan kontrol kondisi if switch select. select relatif lebih khusus dibandingkan keduanya bagian ini tidak akan menjelaskannya akan dibiarkan hingga bagian konkurensi untuk diperkenalkan.
if else
if else paling banyak dua cabang judgment format pernyataannya adalah sebagai berikut
if expression {
}Atau
if expression {
}else {
}expression harus berupa ekspresi boolean yaitu hasilnya entah benar atau salah harus berupa nilai boolean contohnya sebagai berikut
func main() {
a, b := 1, 2
if a > b {
b++
} else {
a++
}
}Juga dapat menulis ekspresi lebih kompleks saat diperlukan untuk meningkatkan keterbacaan sebaiknya menggunakan tanda kurung untuk secara eksplisit menunjukkan mana yang harus dihitung terlebih dahulu.
func main() {
a, b := 1, 2
if a<<1%100+3 > b*100/20+6 { // (a<<1%100)+3 > (b*100/20)+6
b++
} else {
a++
}
}Sekaligus pernyataan if juga dapat berisi beberapa pernyataan sederhana misalnya
func main() {
if x := 1 + 1; x > 2 {
fmt.Println(x)
}
}else if
Pernyataan else if dapat membuat lebih banyak cabang judgment berdasarkan if else format pernyataannya adalah sebagai berikut
if expression1 {
}else if expression2 {
}else if expression3 {
}else {
}Selama proses eksekusi judgment setiap ekspresi adalah dari kiri ke kanan seluruh judgment pernyataan if adalah dari atas ke bawah. Sebuah contoh berdasarkan skor untuk memberikan nilai sebagai berikut cara penulisan pertama
func main() {
score := 90
var ans string
if score == 100 {
ans = "S"
} else if score >= 90 && score < 100 {
ans = "A"
} else if score >= 80 && score < 90 {
ans = "B"
} else if score >= 70 && score < 80 {
ans = "C"
} else if score >= 60 && score < 70 {
ans = "E"
} else if score >= 0 && score < 60 {
ans = "F"
} else {
ans = "nil"
}
fmt.Println(ans)
}Cara penulisan kedua memanfaatkan premis bahwa pernyataan if adalah judgment dari atas ke bawah jadi kode harus lebih ringkas.
func main() {
score := 90
var ans string
if score >= 0 && score < 60 {
ans = "F"
} else if score < 70 {
ans = "D"
} else if score < 80 {
ans = "C"
} else if score < 90 {
ans = "B"
} else if score < 100 {
ans = "A"
} else if score == 100 {
ans = "S"
}else {
ans = "nil"
}
fmt.Println(ans)
}switch
Pernyataan switch juga merupakan jenis pernyataan judgment multi-cabang format pernyataannya adalah sebagai berikut
switch expr {
case case1:
statement1
case case2:
statement2
default:
default statement
}Sebuah contoh sederhana sebagai berikut
func main() {
str := "a"
switch str {
case "a":
str += "a"
str += "c"
case "b":
str += "bb"
str += "aaaa"
default: // Ketika semua case tidak cocok maka akan mengeksekusi cabang default
str += "CCCC"
}
fmt.Println(str)
}Juga dapat menulis beberapa pernyataan sederhana sebelum ekspresi misalnya mendeklarasikan variabel baru
func main() {
switch num := f(); { // setara dengan switch num := f(); true {
case num >= 0 && num <= 1:
num++
case num > 1:
num--
fallthrough
case num < 0:
num += num
}
}
func f() int {
return 1
}Pernyataan switch juga dapat tanpa ekspresi di bagian masuk.
func main() {
num := 2
switch { // setara dengan switch true {
case num >= 0 && num <= 1:
num++
case num > 1:
num--
case num < 0:
num *= num
}
fmt.Println(num)
}Melalui kata kunci fallthrough untuk melanjutkan mengeksekusi cabang berikutnya yang berdekatan.
func main() {
num := 2
switch {
case num >= 0 && num <= 1:
num++
case num > 1:
num--
fallthrough // Setelah menyelesaikan eksekusi cabang ini akan melanjutkan mengeksekusi cabang berikutnya
case num < 0:
num += num
}
fmt.Println(num)
}label
Pernyataan label memberikan label pada sebuah blok kode dapat menjadi target goto break continue. Contohnya sebagai berikut
func main() {
A:
a := 1
B:
b := 2
}Menggunakan label saja tidak memiliki makna apa pun perlu dikombinasikan dengan kata kunci lain untuk digunakan.
goto
goto akan mengalihkan kontrol ke pernyataan label yang sesuai dalam **fungsi yang sama` contohnya sebagai berikut
func main() {
a := 1
if a == 1 {
goto A
} else {
fmt.Println("b")
}
A:
fmt.Println("a")
}Dalam aplikasi praktis goto sangat jarang digunakan lompat ke sana ke mari sangat mengurangi keterbacaan kode konsumsi performa juga merupakan masalah.
