Go kodu, çalışırken, kod yukarıdan aşağı (top to bottom) doğru çalıştırılır. Buna sequential execution ya da lineer execution denir.
Belli durumlarda ise kontrol yapıları devreye girer ve durum kontrolleri yapıldıktan sonra, ilgili durumun sonucuna göre hareket edilir.
Bazı durumlarda tekrar eden döngüler olur (for loops) yine döngünün bitişine ya da sonsuzluğa gidişine göre çalıştırılacak kısımlar devreye alınır.
Eğer verilen <CONDITION>
(durum) -> true
ise; ya da false
ise kod akışının gidişatı
belirlenir:
// true
if <CONDITION> {
...
}
// false
if !<CONDITION> {
...
}
Eğer <CONDITION>
-> true
ise şunu yap, değilse bunu yap:
if <CONDITION> {
...
} else {
....
}
Eğer <CONDITION>
-> A
ise şunu, eğer <CONDITION>
-> B
ise bunu,
hiçbiri ise şunu yap:
if <CONDITION> == <A> {
...
} else if <CONDITION> == <B> {
....
} else {
....
}
Short variable declaration (kısa değişken tanımı) gibi short if
declaration yani kısa if
tanımı da yapmak mümkündür;
if <IDENTIFIER> := <FUNCTION-RESULT()>; <IDENTIFIER> != <COMPARE> {
...
}
// if err is not nil?
if err := result(); err != nil { // err sadece {} arasında yaşar
log.Fatal(err.Error())
}
// fmt.Println(err) olamaz! hata alırız, err diye bir şey yok!
Kısa tanımda aslında on-the-fly yani o anda bir değişken tanımlaması da
yapmış oluyoruz. Ömrü sadece {}
arasında geçerli olan, initializer
dediğimiz şey. Hatta;
package main
import "fmt"
func main() {
// x'i on-the-fly initialize et!
if x := 100; x == 1001 {
fmt.Println("bu mümkün değil!")
}
}